本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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"}'
如果您定義表達式屬性名稱,則必須在整個表達式中一致地使用它。您也無法省略 #
符號。