2017-03-02 90 views
1

我想查詢基於列status_code的dynamoDB表。我通過使用以下代碼得到輸出:OR dynamoDB查詢中的條件

params = { 
    TableName : "Orders_" + environment, 
    IndexName: "StatusCode-StoreID-index", 
    KeyConditionExpression: "StatusCode = :status_code", 
    ExpressionAttributeValues: { 
     ":status_code": "ST01" 
    }, 
    ScanIndexForward: false, 
    Limit : ordersPageSize 
    }; 

這裏我將status_code作爲ST01傳遞。我的問題是關於傳遞多個值而不是ST01。 如何獲取status_code值爲ST01或ST02或ST03的記錄?

回答

0

您可以使用IN運營商FilterExpression

params = { 
    TableName : "Orders_" + environment, 
    IndexName: "StatusCode-StoreID-index", 
    KeyConditionExpression: "StatusCode = :status_code1", 
    ExpressionAttributeValues: { 
     ":status_code1": "ST01" 
    }, 
    ScanIndexForward: false, 
    Limit : ordersPageSize 
    }; 

如果你想獲得多個狀態(即散列鍵),你可以使用batchGetItem API。但是,batchGetItem不支持索引。您只能在主表上使用此API。

+0

我試過了,但得到這個錯誤「message」:「KeyConditionExpression:IN中使用的無效運算符」, 「code」:「ValidationException」 – PETER

+0

對不起,在KeyConditionExpression中只能使用相等運算符。 IN可用於濾波器表達式。 – notionquest

0

按照用於排序關鍵條件DynamoDB Query Documentation

有效的比較如下:

  • sortKeyName =:sortkeyval - 如果所述排序關鍵字值等於:sortkeyval。
  • sortKeyName <:sortkeyval - 如果排序關鍵字值小於:sortkeyval,則返回true。
  • sortKeyName < =:sortkeyval - 如果排序關鍵字值小於或等於:sortkeyval,則返回true。
  • sortKeyName>:sortkeyval - 如果排序關鍵字值大於:sortkeyval,則返回true。
  • sortKeyName> =:sortkeyval - 如果排序關鍵字值大於或等於:sortkeyval,則爲true。
  • sortKeyName BETWEEN:sortkeyval1 AND:sortkeyval2 - 如果排序關鍵字值大於或等於:sortkeyval1且小於 或等於sortkeyval2,則爲true。
  • starts_with(sortKeyName,:sortkeyval) - 如果排序鍵值以特定操作數開頭,則爲true。 (您不能使用此功能 與是Number類型排序關鍵字。)

注意,函數名BEGINS_WITH是區分大小寫的。

所以,只有支持範圍。 沒有IN。你也可以嘗試使用starts_with

您的情況可以轉換爲下面的代碼:

params = { 
    TableName : "Orders_" + environment, 
    IndexName: "StatusCode-StoreID-index", 
    KeyConditionExpression: "begins_with(StatusCode, :status_code)", 
    ExpressionAttributeValues: { 
     ":status_code": "ST0" 
    }, 
    ScanIndexForward: false, 
    Limit : ordersPageSize 
}; 

我希望這有助於。

+0

但是這會給以ST0開始的任何東西。我只需要ST01,ST02和ST03。 – PETER

+1

@PETER,您可以在ST01,ST02和ST03中使用單獨的3個查詢,然後合併它們。否則對不起,Dynamodb不支持IN Query等功能,所以你不能像這樣搜索數據。 – LuFFy