DynamoDB 中的條件和篩選條件表達式、運算子和函數 - Amazon DynamoDB

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

DynamoDB 中的條件和篩選條件表達式、運算子和函數

若要操作 DynamoDB 資料表中的資料,您可以使用 PutItemUpdateItemDeleteItem操作。針對這些資料操控操作,您可以指定條件表達式來判斷應該修改的項目。如果條件表達式評估為 true,操作會成功。否則,操作會失敗。

本節說明在 Amazon DynamoDB 中撰寫篩選條件表達式和條件表達式所使用的內建函數與關鍵字。如需使用 DynamoDB 進行函數和程式設計的詳細資訊,請參閱 使用 DynamoDB 和 進行程式設計 AWS SDKsDynamoDB API參考

篩選條件和條件表達式的語法

在下列語法摘要中,operand 可以是下列:

  • 最上層屬性名稱,例如 IdTitleDescriptionProductCategory

  • 參考巢狀屬性的文件路徑

condition-expression ::= operand comparator operand | operand BETWEEN operand AND operand | operand IN ( operand (',' operand (, ...) )) | function | condition AND condition | condition OR condition | NOT condition | ( condition ) comparator ::= = | <> | < | <= | > | >= function ::= attribute_exists (path) | attribute_not_exists (path) | attribute_type (path, type) | begins_with (path, substr) | contains (path, operand) | size (path)

進行比較

使用這些比較器來比較運算元與單一值:

  • a = b – 如果 a 等於 b.

  • a <> b – 如果 a 不等於 b.

  • a < b – 如果 a 小於 b.

  • a <= b – 如果 a 小於或等於 b.

  • a > b – 如果 a 大於 b.

  • a >= b – 如果 a 大於或等於 b.

使用 BETWEENIN 關鍵字可比較運算元與某範圍的值或列舉值清單:

  • a BETWEEN b AND c – 如果 a 大於或等於 b,且小於或等於 c.

  • a IN (b, c, d) – 如果 a 等於清單中的任何值,例如,b, c、 或 d。 清單最多可包含 100 個值,並以逗號分隔。

函數

使用下列函數可判斷項目中是否具有某屬性,或評估某屬性的值。這些函數名稱區分大小寫。針對巢狀屬性,您必須提供其完整文件路徑。

函式 描述

attribute_exists (path)

如果項目包含 path 指定的屬性,則為 true。

範例:檢查 Product 資料表中的項目是否具有側視圖。

  • attribute_exists (#Pictures.#SideView)

attribute_not_exists (path)

如果項目中沒有 path 指定的屬性,則為 true。

範例:檢查項目是否具有 Manufacturer 屬性。

  • attribute_not_exists (Manufacturer)

attribute_type (path, type)

如果指定路徑的屬性是特定資料類型,則為 true。type 參數必須是下列其中一種:

  • S:字串

  • SS:字串集合

  • N:數字

  • NS:數字集合

  • B:二進位

  • BS:二進位集合

  • BOOL:布林值

  • NULL:Null

  • L:清單

  • M:映射

您必須為 type 參數使用表達式屬性值。

範例:檢查 QuantityOnHand 屬性的類型是否為清單。在此範例中,:v_sub 是字串 L 的預留位置。

  • attribute_type (ProductReviews.FiveStar, :v_sub)

您必須為 type 參數使用表達式屬性值。

begins_with (path, substr)

如果 path 指定的屬性以特定子字串開頭,則為 true。

範例:檢查前視圖圖片的前幾個字元是否為 URL http://

  • begins_with (Pictures.FrontView, :v_sub)

表達式屬性值 :v_subhttp:// 的預留位置。

contains (path, operand)

如果 path 指定的屬性為下列其中一個項目,則為 true:

  • 內含特定子字串的 String

  • 在組合中內含特定元素的 Set

  • 在清單內含特定元素的 List

如果 path 指定的屬性是 String,則 operand 必須是 String。如果 path 指定的屬性是 Set,則 operand 必須是集合的元素類型。

路徑和運算元必須不同。也就是說,contains (a, a) 會傳回錯誤。

範例:檢查 Brand 屬性是否包含子字串 Company

  • contains (Brand, :v_sub)

表達式屬性值 :v_subCompany 的預留位置。

範例:檢查產品是否提供紅色款式。

  • contains (Color, :v_sub)

表達式屬性值 :v_subRed 的預留位置。

size (path)

傳回代表屬性大小的數字。以下是可搭配 size 使用的有效資料類型。

如果屬性的類型為 Stringsize 會傳回字串長度。

範例:檢查字串 Brand 是否小於或等於 20 個字元。表達式屬性值 :v_sub20 的預留位置。

  • size (Brand) <= :v_sub

如果屬性的類型為 Binarysize 會傳回屬性值中的位元組數目。

範例:假設 ProductCatalog 項目具有名為 VideoClip 的二進制屬性,其中包含使用中產品的短片。以下表達式會檢查 VideoClip 是否超過 64,000 個位元組。表達式屬性值 :v_sub64000 的預留位置。

  • size(VideoClip) > :v_sub

如果屬性是 Set 資料類型,size 會傳回集合中的元素數目。

範例:檢查產品是否提供多色款式。表達式屬性值 :v_sub1 的預留位置。

  • size (Color) < :v_sub

如果屬性的類型是 ListMapsize 會傳回子元素數目。

範例:檢查 OneStar 評論數目是否超過特定閾值。表達式屬性值 :v_sub3 的預留位置。

  • size(ProductReviews.OneStar) > :v_sub

邏輯評估

使用 ANDORNOT 關鍵字可執行邏輯評估。在下列清單中,a 以及 b 代表要評估的條件。

  • a AND b – 如果 a 以及 b 都是 true。

  • a OR b – 如果為 ,則為 true ab (或兩者) 為 true。

  • NOT a – 如果 a 為 false。如果為 False a 為 true。

以下是 操作AND中的程式碼範例。

dynamodb-local (*)> select * from exprtest where a > 3 and a < 5;

括號

使用括號可變更邏輯評估的優先順序。例如,假設條件 a 以及 b 是 true,而該條件 c 為 false。下列表達式會評估為 true:

  • a OR b AND c

不過,如果您以括號括住條件,則會先評估該條件。例如,下列表達式會評估為 false:

  • (a OR b) AND c

注意

您可以在表達式中巢狀使用括號。最內部的條件最先評估。

以下是邏輯評估中帶括號的程式碼範例。

dynamodb-local (*)> select * from exprtest where attribute_type(b, string) or ( a = 5 and c = “coffee”);

條件的優先順序

DynamoDB 使用下列優先順序規則,從左到右評估條件:

  • = <> < <= > >=

  • IN

  • BETWEEN

  • attribute_exists attribute_not_exists begins_with contains

  • 括號

  • NOT

  • AND

  • OR