我有一個 AWS DynamoDB 表,該表是通過由 Web 表單觸發的 Lambda 腳本填充的。
該表以“全名”和“電話號碼”等屬性名稱結尾。
從 PowerShell 中的 aws CLI 我可以運行:
aws dynamodb scan --table-name cc_career --filter-expression 'ID = :t' --expression-attribute-values '{\":t\":{\"N\":\"12\"}}'
它將回傳預期值(屬性名稱 = ID,值 = 12)。
但是如果我想過濾屬性“全名”,例如:
aws dynamodb scan --table-name cc_career --filter-expression 'Full Name = :t' --expression-attribute-values '{\":t\":{\"S\":\"Sherman Horton\"}}'
我明白了
An error occurred (ValidationException) when calling the Scan operation: Invalid FilterExpression: Syntax error; token: "Name", near: "Full Name ="
如何正確轉義或指定包含空格的屬性名稱?
我從檔案中閱讀了使用“運算式屬性名稱”的內容。但即使是這個例子:
aws dynamodb scan --table-name cc_career --return-consumed-capacity "TOTAL" --projection-expression "#fn,#dt" --expression-attribute-names '{\"#fn\":\"Email\",\"#dt\":\"Full Name\"}'
將執行沒有錯誤但不回傳“全名”資料。
我對此主題進行了非常徹底的“網路搜索”,但一無所獲。當然這是一個常見的用例!
uj5u.com熱心網友回復:
您對使用運算式屬性名稱是正確的
如果屬性名稱以數字開頭、包含空格或包含保留字,則必須使用運算式屬性名稱來替換運算式中該屬性的名稱。
aws dynamodb scan --table-name cc_career --return-consumed-capacity "TOTAL" --projection-expression "#fn,#dt" --expression-attribute-names '{\"#fn\":\"Email\",\"#dt\":\"Full Name\"}'
這里的問題是您缺少filter expression https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.FilterExpression
ID考慮到作為 PK的表設計Full Name并Phone Number使用以下命令,我能夠掃描基于Full Name
aws dynamodb scan --table-name stack_overflow --filter-expression "#fn = :t" --expression-attribute-values '{":t":{"S":"Jatin Mehrotra"}}' --expression-attribute-name '{"#fn":"Full Name"}
運行上述命令后的結果
{
"Items": [
{
"ID": {
"N": "1"
},
"Full Name": {
"S": "Jatin Mehrotra"
},
"Phone Number": {
"S": "123456789"
}
}
],
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/515181.html
標籤:亚马逊网络服务亚马逊-dynamodbdynamodb 查询
上一篇:模板包含錯誤。:模板格式錯誤:YAML格式不正確。(第30行,第9列),即型別:AWS::EC2::Route行
