查詢操作的索引鍵條件表達式 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

查詢操作的索引鍵條件表達式

若要指定搜尋條件,請使用索引鍵條件表達式 (判斷要從資料表或索引讀取之項目的字串)。

您必須將分割區索引鍵名稱及數值指定為相等條件。您無法在索引鍵條件表達式中使用非索引鍵屬性。

您可以選擇性為排序索引鍵提供第二個條件 (若有的話)。排序索引鍵條件必須使用下列其中一個比較運算子:

  • a = b:如果屬性 a 等於數值 b,則為 true

  • a < b:如果 a 小於 b,則為 true

  • a <= b:如果 a 小於或等於 b,則為 true

  • a > b:如果 a 大於 b,則為 true

  • a >= b:如果 a 大於或等於 b,則為 true

  • a BETWEEN b AND c:如果 a 大於或等於 b 且小於或等於 c,則為 true。

同樣支援下列函數:

  • begins_with (a, substr):如果屬性 a 的值開頭為特定子字串,則為 true。

下面的 AWS Command Line Interface (AWS CLI)實例演示了鍵條件表達式的用法。這些表達式會使用預留位置 (例如 :name:sub),而非實際的值。如需更多詳細資訊,請參閱 DynamoDB 中的表達式屬性名稱表達式屬性值

範例

查詢 Thread 表是否有特定的 ForumName (分割區索引鍵)。查詢會讀取所有具有該 ForumName 值的項目,因為 KeyConditionExpression 中不包含排序索引鍵 (Subject)。

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name" \ --expression-attribute-values '{":name":{"S":"Amazon DynamoDB"}}'
範例

查詢 Thread 表是否有特定的 ForumName (分割區索引鍵),但這次僅傳回具有指定 Subject (排序索引鍵) 的項目。

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name and Subject = :sub" \ --expression-attribute-values file://values.json

--expression-attribute-values 的引數會存放在 values.json 檔案中。

{ ":name":{"S":"Amazon DynamoDB"}, ":sub":{"S":"DynamoDB Thread 1"} }
範例

查詢 Reply 表是否有特定的 Id (分割區索引鍵),但只傳回以特定字元開頭的 ReplyDateTime (排序索引鍵) 項目。

aws dynamodb query \ --table-name Reply \ --key-condition-expression "Id = :id and begins_with(ReplyDateTime, :dt)" \ --expression-attribute-values file://values.json

--expression-attribute-values 的引數會存放在 values.json 檔案中。

{ ":id":{"S":"Amazon DynamoDB#DynamoDB Thread 1"}, ":dt":{"S":"2015-09"} }

您可以在索引鍵條件表達式中使用任何屬性名稱,只要第一個字元為 a-zA-Z,且其餘字元 (若有的話,從第二個字元開始) 為 a-zA-Z,或 0-9。此外,屬性名稱不得為 DynamoDB 的保留字。(如需這些保留字的完整清單,請參閱「DynamoDB 中的保留字」)。若屬性名稱不符合這些需求,您必須將表達式屬性名稱定義為預留位置。如需詳細資訊,請參閱 DynamoDB 中的表達式屬性名稱

針對具有給定分割區索引鍵值的項目,DynamoDB 會依照排序索引鍵值,將這些項目以排序後的順序存放在緊鄰位置。在 Query 操作中,DynamoDB 會以排序後的順序擷取項目,並使用 KeyConditionExpression 及任何存在的 FilterExpression 處理項目。只有在這個時候,Query 的結果才會傳回用戶端。

Query 操作永遠都會傳回一個結果集。如果找不到相符項目,表示結果集是空的。

Query 結果永遠都會根據排序索引鍵值進行排序。如果排序索引鍵的資料類型是 Number,即依數值順序傳回結果。否則,按 UTF-8 位元組順序傳回結果。根據預設,排序順序為遞增排序。若要反轉順序,請將 ScanIndexForward 參數設為 false

單一 Query 操作最多可擷取 1 MB 的資料。這項限制會在任何 FilterExpressionProjectionExpression 套用到結果之前套用。若回應中有 LastEvaluatedKey 且為非 Null,您即必須為結果集編製分頁 (請參閱分頁表查詢結果)。