【发布时间】:2018-04-02 13:04:05
【问题描述】:
我正在尝试使用 nodejs aws sdk 过滤 dynamodb 扫描操作返回的数据,但返回的数据有 0 个项目。
Response : {"Items":[],"Count":0,"ScannedCount":15}
我已经尝试过 FilterExpression 和 ScanFilter 但得到了相同的结果。
过滤器表达式:
var params = {
TableName: tableName,
FilterExpression: 'active = :active',
ExpressionAttributeValues: {
':active': {
S: '1'
}
}
};
扫描过滤器:
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 控制台中检查了相同的过滤条件并得到了预期的结果。
【问题讨论】:
-
您的代码是否进入
LastEvaluatedKey != 'undefined'条件?换句话说,您是否正在处理不止一个电话dynamodb.scan()?callback()函数的代码是什么?这不是在 Lambda 函数中运行的吗? -
@MarkB 不,代码不处理对 dynamodb.scan() 的多次调用,并且回调是在 EC2 实例上运行的节点快速应用程序。
-
你可以在FilterExpressions中试试
ExpressionAttributeValues : {':active': '1'}
标签: node.js amazon-web-services amazon-dynamodb