我正在尝试使用nodejs aws sdk过滤dynamodb扫描操作返回的数据,但返回的数据有0个项目。
响应:{"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 控制台中检查了相同的过滤条件并得到了预期的结果。
最佳答案
@bharathp 的回答对我有用,
在aws命令行中必须将参数指定为{"S":"s1"}
aws dynamodb scan \
--table-name aws-nodejs-typescript-dev \
--filter-expression "id = :search" \
--expression-attribute-values '{":search":{"S":"s1"}}'
在 Node 代码中只需":search": "s1"
const params = {
TableName: process.env.DYNAMODB_TABLE,
ExpressionAttributeValues: {
":search": "s1"
},
FilterExpression: "id = :search",
ProjectionExpression: "id",
};
dynamoDb.scan(params, (error, result) => {
关于node.js - DynamoDB 扫描 FilterExpression 返回空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46864674/