Сканирование таблицы DynamoDB не показывает результаты из столбца, указанного в ProjectionExpression - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь отсканировать рассказ DynamoDB, чтобы получить только отфильтрованные элементы.myTable имеет 3 столбца: метка времени L (строка, PK), цвета (строка), идентификатор пользователя (строка)

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 {Items: [{userId: 'amzn1.ask.account.XYZ'}], Количество: 1, Количество сканированных: 2}

В результате я получаю только значения из столбца userId.Столбец 'colors' полностью игнорируется.

Что я делаю не так?

1 Ответ

0 голосов
/ 22 мая 2018

Настройка ProjectionExpression атрибутов в ExpressionAttributeNames.Посмотрите следующий фрагмент

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 соответственно.

...