繁体   English   中英

或查询 Amazon DynamoDB 中的多个属性

[英]OR-query on multiple attributes in Amazon DynamoDB

我有一张这样的桌子:

交通工具

编号(PK) 创建数据 托运人编号 承运商编号 收货人编号
1个 23 联系人3 联系人2 联系人1
2个 24 联系人1 联系人2 联系人3
3个 28 联系人3 联系人2 联系人4

我的访问模式是:

  • 查找联系人是按 createDt 排序的托运人、承运人或收货人的所有运输。 例如,输入 contact1 应该返回记录 1、2。

我如何在 DyanomoDB 中执行此操作?

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

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

PK SK 类型 GSI1PK GSI1SK 其他属性
运输#1 运输#1 运输 createDt, (shipperId, carrierId, consigneeId)...
运输#1 联系#SHIP 托运人联系方式 联系人#contact3 运输#1#SHIP ...
运输#1 联系#CARR 运营商接触 联系人#contact2 运输#1#CARR ...
运输#1 联系方式#CONS 收货人联系方式 联系人#contact1 运输#1#CONS ...
  • 要获取有关给定传输 ID 的所有信息,您可以使用PK=TRANSP#<id>进行查询
  • 要仅获取有关给定传输的基本信息,您可以在PK=TRANSP#<id> and SK=TRANSP<id>上执行GetItem (如果联系信息相当 static,您也可以在此处复制联系信息。)
  • 要获取联系人涉及的所有传输,您执行PK=CONTACT#<id> and SK starts with TRANSPGSI1上以 TRANSP 开头

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM