nodejs aws sdkを使用してdynamodbスキャン操作によって返されたデータをフィルタリングしようとしましたが、返されるデータには0個の項目があります。DynamoDBスキャンFilterExpression空の結果を返します
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のコンソールで同じフィルタ条件をチェックし、期待される結果を取得します。
あなたのコードは 'LastEvaluatedKey!= 'undefined''条件に入りますか?言い換えれば、 'dynamodb.scan()'を複数回呼び出すことですか? 'callback()'関数のコードは何ですか?これはラムダ関数では実行されていませんか? –
@ MarkBいいえ、コードはdynamodb.scan()への複数の呼び出しを扱っておらず、コールバックはEC2インスタンス上で動作するノードエクスプレスアプリケーションです。 – acnn
FilterExpressionsで 'ExpressionAttributeValues:{':active': '1'}'を試してみることができます – bharathp