如何在DyanmoDb API的FilterExpression中使用等于

时间:2018-09-14 01:46:22

标签: javascript node.js reactjs amazon-dynamodb

我在扫描时遇到很多麻烦,然后使用FilterExpression根据单个值进行过滤。我看过api文档和其他堆栈溢出问题,但是仍然无法确定正确的语法。由于我也是第一次使用react和javascript,因此我对它们的理解可能是一个问题。

以下是我尝试用作过滤器表达式的内容。 uploadId是Dynamo数据库表中的字段名称,event.pathParameters.id是应解析为扫描结果所依据的值的变量。

FilterExpression: "uploadId = :event.pathParameters.id"

下面是上下文中的代码:

import * as dynamoDbLib from "./libs/dynamodb-lib";
    import { success, failure } from "./libs/response-lib";

export async function main(event, context, callback) {
  const params = {
    TableName: "uploads",
    FilterExpression: "uploadId = :event.pathParameters.id"
  };

  try {
    const result = await dynamoDbLib.call("scan", params);
    if (result.Item) {
      // Return the retrieved item
      callback(null, success(result.Item));
    } else {
      callback(null, failure({ status: false, error: "Item not found." }));
    }
  } catch (e) {
    callback(null, failure({ status: false }));
  }
}

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

始终将表达式与ExpressionAttributeValues一起使用。 params应该看起来像这样。

const params = {
    TableName: "uploads",
    FilterExpression: "uploadId = :uid",
    ExpressionAttributeValues: {
        ":uid" : {S: event.pathParameters.id} //DynamoDB Attribute Value structure. S refer to String, N refer to Number, etc..
    } 
};