[英]Scan Function in DynamoDB with reserved keyword as FilterExpression NodeJS
我的掃描功能:
var tableName = 'faasos_orders',
filterExp = 'status = :delivered OR status = :void OR status = :bad',
projectionValues = '',
expressionAttr = {};
expressionAttr[":delivered"] = "delivered";
expressionAttr[":bad"] = "bad";
expressionAttr[":void"] = "void";
limit = 10;
dynamoConnector.getItemUsingScan(tableName, filterExp, projectionValues, expressionAttr, function (err, data) { ...........}
運行時出錯:
{ [ValidationException: Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: status]
message: 'Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: status',
code: 'ValidationException',
time: Mon Apr 18 2016 21:57:30 GMT+0530 (IST),
requestId: 'AV6QFHM7SPQT1QR3D4OO81ED4FVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 0 }
現在我明白了我試圖在過濾器表達式中使用一個非法的保留關鍵字。 但是如果我通過 aws gui 運行相同的函數,它會很好地返回數據(查看圖像了解詳細信息):通過 gui 掃描狀態函數
所以問題是如何通過節點添加過濾器表達式而不必更改鍵名???
解決了:
aws-sdk 有兩個參數:
表達式屬性名稱
表達式屬性值
兩者都提供替換屬性列表中使用的占位符的功能。 這里的 Attributes 有點模棱兩可,讓我感到困惑。 aws 上的向導在使用術語屬性時表示鍵和值。
因此,如果您想使用保留關鍵字作為關鍵屬性,請使用帶有 #(pound) 的 Expression Attribute Name 參數來表示占位符。
類似地,您要為 value 屬性使用占位符,請使用帶有 :(colon) 的 Expression Attribute Value 參數來表示占位符。
所以最后我的代碼(工作)看起來像這樣:
var param = {
TableName: "faasos_orders",
FilterExpression: "#order_status = :delivered OR #order_status = :void OR #order_status = :bad",
ExpressionAttributeValues: {
":delivered": "delivered",
":void": "void",
":bad": "bad"
},
ExpressionAttributeNames: {
"#order_status": "status"
}
};
dynamodb.scan(param, function (err, data) {....});
:status
是表達式中的占位符,您沒有為其提供值。 在此處查看您如何為其他占位符提供值:
expressionAttr[":delivered"] = "delivered";
expressionAttr[":bad"] = "bad";
expressionAttr[":void"] = "void"
您需要對:status
占位符執行相同操作。 我在錯誤消息中沒有看到任何有關保留字的信息,所以我不確定您為什么認為這是導致錯誤的原因。 該錯誤非常明確地指出您沒有為:status
占位符提供值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.