在node.js
函数中扫描dynamodb
中的表时,我面临一些麻烦。
当我在函数上扫描时,我得到了2行,但是当我在AWS
控制台上扫描时,我得到了3行。
遵循以下代码:
使用SAWS扫描功能:
scanDocuments(params) {
return new Promise((resolve, reject) => {
var docClient = new this.AWS.DynamoDB.DocumentClient();
console.log(`Querying ${params.TableName}...`);
docClient.scan(params, function (err, data) {
if (err) {
console.error(
"Unable to query. Error:",
JSON.stringify(err, null, 2)
);
return reject(err);
} else {
console.log("Query succeeded.");
return resolve(data.Items);
}
});
});
}
//使用扫描功能
var params = {
TableName: 'minha-redacao-redacoes',
FilterExpression: "#e = :cpfAluno",
ExpressionAttributeNames: {
"#e": "cpfAluno",
},
ExpressionAttributeValues: {
":cpfAluno": `8509754....`
},
};
try {
const res = await utilsAWS.scanDocuments(params);
console.log(res.length); //2
} catch(err) {
console.error(err);
}
但请看AWS
控制台:
使用node.js
函数扫描时,未找到行ID:F3EBB776-13EB-4395-884E-E81F23044CA1
。 为了部分解决这个问题,我创建了F3EBB776-13EB-4395-884E-E81F23044CA1_Manual
文档。
有谁知道这个问题的确切解决办法吗?
假设所有3条记录实际上都满足筛选条件,您应该检查响应的LasteValuatedKey
属性。
尽管涉及的项目数量很少,但并不能保证scan
操作会在第一个响应中返回所有匹配的元素。 合同内容为:
LasteValuatedKey
为空,则您位于结果的最后一页ExclusiveStartKey
重复扫描操作,以便继续扫描。更多信息请访问官方文档。