我试图使用nodejs aws sdk过滤由dynamodb扫描操作返回的数据,但返回的数据有0项 .
Response : {"Items":[],"Count":0,"ScannedCount":15}
我尝试过使用FilterExpression和ScanFilter但得到了相同的结果 .
FilterExpression:
var params = {
TableName: tableName,
FilterExpression: 'active = :active',
ExpressionAttributeValues: {
':active': {
S: '1'
}
}
};
ScanFilter:
var params = {
TableName: tableName,
ScanFilter: {
'active': {
"AttributeValueList": [{ "S": "1" }],
"ComparisonOperator": "EQ"
}
}
};
这是nodejs代码:
dynamodb.scan(params, onScan);
function onScan(err, data) {
if (err) {
console.error('Unable to scan the table. Error JSON:', JSON.stringify(err, null, 2));
} else {
if (typeof data.LastEvaluatedKey != 'undefined') {
params.ExclusiveStartKey = data.LastEvaluatedKey;
dynamodb.scan(params, onScan);
}
if (data && data.Items)
callback(data.Items);
else
callback(null);
}
}
我在dynamodb控制台中检查了相同的过滤条件并获得了预期的结果 .
3 回答
@bharathp回答为我做了诀窍,
在aws命令行中必须将参数指定为 {"S":"s1"}
在节点代码中 ":search": "s1"
在AWS CLI上,这对我来说很合适,
aws dynamodb扫描
但是,当尝试在NodeJs / Angular5 / typescript上编写相同的查询时,它会失败:
为了工作,我不得不省略属性类型,所以这里的代码工作:
希望帮助丹尼尔
它表示扫描了15个项目,未找到任何项目 . 您可能会在
if (typeof data.LastEvaluatedKey != 'undefined') { params.ExclusiveStartKey = data.LastEvaluatedKey; dynamodb.scan(params, onScan); }
的循环中找到该项目扫描操作扫描所有项目并过滤匹配 .