扫描 DynamoDB 表未显示投影表达式中指定的列的结果



我正在尝试扫描 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
});

注意#:必须分别存在于ExpressionAttributeNamesExpressionAttributeValues上。

最新更新