DynamoDB 中的運算式屬性名稱 (別名) - Amazon DynamoDB

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

DynamoDB 中的運算式屬性名稱 (別名)

運算式屬性名稱是您在 Amazon DynamoDB 運算式中使用的別名 (或預留位置),作為實際屬性名稱的替代方式。表示式屬性名稱必須以井字號 (#) 開頭,後面接著一個或多個英數字元。底線 (_) 字元也是允許的。

本節說明必須使用表達式屬性名稱的數種狀況。

注意

本節中的範例使用 AWS Command Line Interface (AWS CLI)。

保留字

有時候您需要撰寫的表達式可能會包含與 DynamoDB 保留字衝突的屬性名稱。(如需完整的保留字清單,請參閱DynamoDB 中的保留字。)

例如,下列 AWS CLI 範例會失敗,因為COMMENT是保留字。

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Comment"

若要解決此情況,您可以將 Comment 取代為表達式屬性名稱 (例如 #c)。# (井字號) 是必要項目,指出這是屬性名稱的預留位置。此 AWS CLI 範例現在如下所示。

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#c" \ --expression-attribute-names '{"#c":"Comment"}'
注意

若屬性名稱的開頭是數字、包含空格或包含保留字,您必須使用表達式屬性名稱來取代表達式中的該屬性名稱。

包含特殊字元的屬性名稱

在表達式中,點號 (".") 會被解譯為文件路徑中的分隔符號字元。不過,DynamoDB 允許您使用點字元和其他特殊字元,例如連字號 (「-」) 作為屬性名稱的一部分。這在某些情況下可能會模棱兩可。為了示範,假設您想要從 ProductCatalog 項目擷取 Safety.Warning 屬性 (請參閱在 DynamoDB 中使用運算式時參照項目屬性)。

假設您想要使用投射表達式來存取 Safety.Warning

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Safety.Warning"

DynamoDB 將會傳回空的結果,而不是預期字串 (Always wear a helmet)。原因是 DynamoDB 會將表達式中的點解譯為文件路徑分隔符號。在此情況下,您必須定義表達式屬性名稱 (例如 #sw) 做為 Safety.Warning 的替代項目。您接著可以使用下列投射表達式。

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#sw" \ --expression-attribute-names '{"#sw":"Safety.Warning"}'

DynamoDB 接著會傳回正確結果。

注意

若屬性名稱包含點 (「.」) 或連字號 (「-」),您必須使用表達式屬性名稱來取代表達式中的該屬性名稱。

巢狀屬性

假設你想訪問嵌套屬性ProductReviews.OneStar。在運算式屬性名稱中,DynamoDB 會將點 (「.」) 視為屬性名稱中的字元。若要參照巢狀屬性,請為文件路徑中的每個元素定義運算式屬性名稱:

  • #pr — ProductReviews

  • #1star — OneStar

您接著可以使用 #pr.#1star 做為投射表達式。

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr.#1star" \ --expression-attribute-names '{"#pr":"ProductReviews", "#1star":"OneStar"}'

DynamoDB 接著會傳回正確結果。

重複參考屬性名稱

當您需要反覆參考相同的屬性名稱時,表達式屬性名稱十分有用。例如,請考慮以下表達式,從 ProductCatalog 項目擷取部分檢閱。

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "ProductReviews.FiveStar, ProductReviews.ThreeStar, ProductReviews.OneStar"

更精確地來說,您可以將 ProductReviews 取代為表達式屬性名稱 (例如 #pr)。修訂過的表達式如下所示。

  • #pr.FiveStar, #pr.ThreeStar, #pr.OneStar

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr.FiveStar, #pr.ThreeStar, #pr.OneStar" \ --expression-attribute-names '{"#pr":"ProductReviews"}'

如果您定義表達式屬性名稱,則必須在整個表達式中一致地使用它。您也無法省略 # 符號。