首页 > 解决方案 > 如何在 DyanmoDb API 的 FilterExpression 中使用 equals

问题描述

我在扫描然后使用 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 }));
  }
}

谢谢您的帮助!

标签: javascriptnode.jsreactjsamazon-dynamodb

解决方案


始终将表达式与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..
    } 
};

推荐阅读