Javascript nodejs DynamoDB按映射项扫描
我有一个DynamoDB表,我想返回Review.ID映射值等于123的所有项目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
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本机对象封送和解封数据
使用文档客户端
等待承诺后的结果是什么样的?与您的问题无关,您希望等待参数做什么?目前它只是空[],但我希望等待承诺在查询后最终返回值。这是等待后的值。这不会改变的。谢谢你,贾蒙德,这非常有帮助。我真的很感激你在答复中为我提供的大量信息。