Javascript nodejs DynamoDB按映射项扫描

Javascript nodejs DynamoDB按映射项扫描,javascript,node.js,amazon-web-services,amazon-dynamodb,Javascript,Node.js,Amazon Web Services,Amazon Dynamodb,我有一个DynamoDB表,我想返回Review.ID映射值等于123的所有项目 Item: { id: 1, review: { Id: 123, step1: 456, step2: 789, step3: 1234, }, // Add more items here }, Item: { id: 2, review: { Id: 123, step1: 999, step2: 888, step3

我有一个DynamoDB表,我想返回Review.ID映射值等于123的所有项目

Item: {
  id: 1,
  review: {
    Id: 123,
    step1: 456,
    step2: 789,
    step3: 1234,
    },
  // Add more items here
},
Item: {
  id: 2,
  review: {
    Id: 123,
    step1: 999,
    step2: 888,
    step3: 777,
    },
  // Add more items here
},
理想返回示例:

id: 1,
review: {
 - id: 123,
 - step: 456,
 - step2: 789,
 - step3: 1234,
}
id: 2,
review: {
  - id: 123,
 - step: 999,
 - step2: 888,
 - step3: 777,
}
这是我在NodeJS中的当前代码

exports.handler = async (event, context, callback) => {

 const params = {
    FilterExpression: "review.Id = :review",
    ExpressionAttributeValues: {
        ":review": 123,
    },
  TableName: "sometable"
 };


   let promise = dynamoDb.scan(params).promise();
   let result = await promise;
   let data = result.Items;
    if (result.LastEvaluatedKey) {
        params.ExclusiveStartKey = result.LastEvaluatedKey;
        data = data.concat(await (params));
    }


    // create a response
      const response = {
      statusCode: 200,
      body: JSON.stringify(data),
    };
    callback(null, response);

};
运行此代码会得到一个空结果[]


如果您能在这方面提供帮助,我们将不胜感激。

您还没有展示所有代码,但我建议您的dynamoDb客户端是低级的,而不是高级的。它们使用不同的方式提供属性值。您使用的是低级DynamoDB客户机,但指示属性值的方式与使用高级文档客户机的方式相同

下面是一个对比两种客户端方法的示例:

const AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });

// High-level Document Client
const dc = new AWS.DynamoDB.DocumentClient();

// High-level scan parameters for Document Client
const paramsDC = {
  FilterExpression: "review.Id = :review",
  ExpressionAttributeValues: {
    ":review": 123,
  },
  TableName: "sometable"
};

// Low-level DynamoDB Client
const db = new AWS.DynamoDB();

// Low-level scan parameters for DynamoDB Client
const paramsDB = {
  FilterExpression: "review.Id = :review",
  ExpressionAttributeValues: {
    ":review": { "N": "123" },
  },
  TableName: "sometable"
};

(async() => {
  // High-level scan
  const resultDC = await dc.scan(paramsDC).promise();
  console.log('DC Items:', JSON.stringify(resultDC.Items));

  // Low-level scan
  const resultDB = await db.scan(paramsDB).promise();
  console.log('DB Items:', JSON.stringify(resultDB.Items));
})();
这导致:

DC Items: [{"review":{"step":999,"id":123},"id":2},{"review":{"step":456,"id":123},"id":1}]
DB Items: [{"review":{"M":{"step":{"N":"999"},"id":{"N":"123"}}},"id":{"N":"2"}},{"review":{"M":{"step":{"N":"456"},"id":{"N":"123"}}},"id":{"N":"1"}}]
请注意,低级DynamoDB客户机响应看起来有点不同,但实际上只是相同结果的一种不同的解组表示。它包括id:{N:1},表示id是一个值为1的数字,其中文档客户端显示id:1。低级结果包括M:{…},它们是映射,而高级文档客户端会自动将它们解组为JavaScript对象

底线:

文档客户端较新 文档客户端向JavaScript本机对象封送和解封数据 使用文档客户端
等待承诺后的结果是什么样的?与您的问题无关,您希望等待参数做什么?目前它只是空[],但我希望等待承诺在查询后最终返回值。这是等待后的值。这不会改变的。谢谢你,贾蒙德,这非常有帮助。我真的很感激你在答复中为我提供的大量信息。