首页 > 解决方案 > 对 Amazon DynamoDB 中的多个属性进行 OR 查询

问题描述

我有一张这样的桌子:

运输

身份证(PK) 创建Dt 托运人 ID 运营商 ID 收货人编号
1 23 联系方式3 联系人2 联系人1
2 24 联系人1 联系人2 联系方式3
3 28 联系方式3 联系人2 联系方式4

我的访问模式是:

如何在 DyanomoDB 中执行此操作?

我考虑过创建一个 GSI。但是我需要为每一列创建一个单独的 GSI,这意味着我需要自己在列上加入查询结果。也许有更简单的方法。

标签: amazon-dynamodb

解决方案


我会在桌子上创建一个 GSI 并将您的单个记录拆分为多个记录。这会使写入稍微复杂一些,因为您编写了多个实体,但我会做这样的事情:

PK SK 类型 GSI1PK GSI1SK 其他属性
传输#1 传输#1 运输 createDt, (shipperId, carrierId, consigneeId)...
传输#1 联系方式#SHIP 托运人联系方式 联系方式#contact3 运输#1#SHIP ...
传输#1 联系方式#CARR 承运人联系 联系方式#contact2 TRANSP#1#CARR ...
传输#1 联系方式#缺点 收货人联系方式 联系方式#contact1 TRANSP#1#缺点 ...
  • 要获取有关给定传输 ID 的所有信息,请使用PK=TRANSP#<id>
  • 要仅获取有关给定传输的基本信息,您可以执行GetItemon PK=TRANSP#<id> and SK=TRANSP<id>(如果它们是相当静态的,您也可以在此处复制联系信息。)
  • 要获取联系人参与的所有传输,请执行PK=CONTACT#<id> and SK starts with TRANSPonGSI1

如果你真的需要服务器端排序,你可能会选择一个不同的GSI1SK,可能会在它前面加上dt值,但我可能只是做那个客户端。


推荐阅读