或查询 Amazon DynamoDB 中的多个属性
OR-query on multiple attributes in Amazon DynamoDB
我有一个 table 这样的:
运输
id (PK)
createDt
shipperId
carrierId
consigneeId
1
23
contact3
contact2
contact1
2
24
contact1
contact2
contact3
3
28
contact3
contact2
contact4
我的访问模式是:
- 查找联系人是托运人、承运人或收货人的所有运输,按 createDt 排序。例如。输入 contact1 应该 return 记录 1, 2.
我如何在 DyanomoDB 中执行此操作?
我想创建一个 GSI。但随后我需要为每个列创建一个单独的 GSI,这意味着我需要自己在列上加入查询结果。也许有更简单的方法。
我会在 table 上创建一个 GSI,然后将您的单条记录分成多条。
这会使写入稍微复杂一些,因为您编写了多个实体,但我会这样做:
PK
SK
type
GSI1PK
GSI1SK
other attributes
TRANSP#1
TRANSP#1
transport
createDt, (shipperId, carrierId, consigneeId)...
TRANSP#1
CONTACT#SHIP
shipper-contact
CONTACT#contact3
TRANSP#1#SHIP
...
TRANSP#1
CONTACT#CARR
carrier-contact
CONTACT#contact2
TRANSP#1#CARR
...
TRANSP#1
CONTACT#CONS
consignee-contact
CONTACT#contact1
TRANSP#1#CONS
...
- 要获取有关给定传输 ID 的所有信息,请使用
PK=TRANSP#<id>
进行查询
- 要仅获取有关给定交通工具的基本信息,您可以在
PK=TRANSP#<id> and SK=TRANSP<id>
上执行 GetItem
(如果联系信息相当静态,您也可以在此处复制联系信息。)
- 要获取联系人参与的所有传输,您可以在
GSI1
上执行 PK=CONTACT#<id> and SK starts with TRANSP
如果您确实需要服务器端排序,您可以选择不同的 GSI1SK
,也许可以在其前面加上 dt
值,但我可能只在客户端进行排序。
我有一个 table 这样的:
运输
id (PK) | createDt | shipperId | carrierId | consigneeId |
---|---|---|---|---|
1 | 23 | contact3 | contact2 | contact1 |
2 | 24 | contact1 | contact2 | contact3 |
3 | 28 | contact3 | contact2 | contact4 |
我的访问模式是:
- 查找联系人是托运人、承运人或收货人的所有运输,按 createDt 排序。例如。输入 contact1 应该 return 记录 1, 2.
我如何在 DyanomoDB 中执行此操作?
我想创建一个 GSI。但随后我需要为每个列创建一个单独的 GSI,这意味着我需要自己在列上加入查询结果。也许有更简单的方法。
我会在 table 上创建一个 GSI,然后将您的单条记录分成多条。 这会使写入稍微复杂一些,因为您编写了多个实体,但我会这样做:
PK | SK | type | GSI1PK | GSI1SK | other attributes |
---|---|---|---|---|---|
TRANSP#1 | TRANSP#1 | transport | createDt, (shipperId, carrierId, consigneeId)... | ||
TRANSP#1 | CONTACT#SHIP | shipper-contact | CONTACT#contact3 | TRANSP#1#SHIP | ... |
TRANSP#1 | CONTACT#CARR | carrier-contact | CONTACT#contact2 | TRANSP#1#CARR | ... |
TRANSP#1 | CONTACT#CONS | consignee-contact | CONTACT#contact1 | TRANSP#1#CONS | ... |
- 要获取有关给定传输 ID 的所有信息,请使用
PK=TRANSP#<id>
进行查询
- 要仅获取有关给定交通工具的基本信息,您可以在
PK=TRANSP#<id> and SK=TRANSP<id>
上执行GetItem
(如果联系信息相当静态,您也可以在此处复制联系信息。) - 要获取联系人参与的所有传输,您可以在
GSI1
上执行
PK=CONTACT#<id> and SK starts with TRANSP
如果您确实需要服务器端排序,您可以选择不同的 GSI1SK
,也许可以在其前面加上 dt
值,但我可能只在客户端进行排序。