为什么使用nodejs进行扫描仅显示3个结果,而dynamodb管理工具却显示9个结果
var params = {
TableName: process.env.DYNAMODB_TABLE_LIGHTHOUSE,
FilterExpression: '#blickArticleId = :valblickArticleId AND #firstFolder = :valfirstFolder',
ExpressionAttributeNames: {
'#blickArticleId': 'blickArticleId',
'#firstFolder': 'firstFolder'
},
ExpressionAttributeValues: {
':valblickArticleId': 'null',
':valfirstFolder': 'null'
},
};
const queryResponse = await dynamoDb.scan(params).promise()
不是一样的
答案 0 :(得分:2)
您确定您扫描的内容不超过1MB吗?
如果扫描的项目总数超过最大数据集大小 限制为1 MB,扫描将停止并将结果返回给用户 带有LastEvaluatedKey
然后,您可以使用LastEvaluatedKey扫描其余项目。
答案 1 :(得分:1)
您的代码需要扫描其余项目。非空LastEvaluatedKey
的存在表示DynamoDB结果是分页的。 AWS DynamoDB控制台大概正在为您做分页。
这是fetch all items if paginated的代码示例。
答案 2 :(得分:0)
jarmod提到分页是解决方案:
const getLalalalalal = async () => {
var params = {
TableName: process.env.DYNAMODB_TABLE_LIGHTHOUSE,
FilterExpression: '#blickArticleId = :valblickArticleId AND #firstFolder = :valfirstFolder',
ExpressionAttributeNames: {
'#blickArticleId': 'blickArticleId',
'#firstFolder': 'firstFolder'
},
ExpressionAttributeValues: {
':valblickArticleId': 'null',
':valfirstFolder': 'null'
},
};
return await scanTable(params)
}
const scanTable = async (params) => {
let scanResults = [];
let items;
do {
items = await dynamoDb.scan(params).promise();
items.Items.forEach((item) => scanResults.push(item));
params.ExclusiveStartKey = items.LastEvaluatedKey;
} while(typeof items.LastEvaluatedKey != "undefined");
return scanResults;
};