簡體   English   中英

DynamoDB 中的 Scan 函數,保留關鍵字為 FilterExpression NodeJS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM