我正在尝试扫描 DynamoDB 故事,以便仅获取筛选的项目。 myTable 有 3 列:L 时间戳(字符串,PK(,颜色(字符串(,用户 ID (字符串(
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
"TableName": "myTable",
"ProjectionExpression": "colors, userId",
"ExpressionAttributeValues": {":val": userId},
"FilterExpression": "userId = :val"
};
console.log("Scanning table.");
docClient.scan((params), function(err,data){
if (err) console.log(err, err.stack);
else console.log(data); //success response
});
2018-05-22T08:04:21.395Z baac6d92-5d96-11e8-ae78-bd04c275acf5 扫描表。 2018-05-22T08:04:21.672Z baac6d92-5d96-11e8-ae78-bd04c275acf5 { 项目: [ { 用户 ID: 'amzn1.ask.account.XYZ' } ], 计数: 1, 扫描计数: 2 }
结果,我只从用户 ID 列中获取值。"颜色"列被完全忽略。
我做错了什么?
在ExpressionAttributeNames
中设置ProjectionExpression
属性。查看以下代码片段
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
ExpressionAttributeNames: {
"#colors": "colors",
"#userId": "userId"
},
ExpressionAttributeValues: {
":val": userId
},
FilterExpression: "userId = :val",
ProjectionExpression: "#colors, #userId",
TableName: "myTable"
};
console.log("Scanning table.");
docClient.scan(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data); //success response
});
注意#
和:
必须分别存在于ExpressionAttributeNames
和ExpressionAttributeValues
上。