簡體   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