DynamoDB: значение, указанное в ExpressionAttributeNames, не используется в выражениях: keys: {#date} - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь обновить элемент, изменив значение isRelevant на true:

              var params = {
                  TableName: "test",
                  Key: {
                      "#date": data.Items[i].date.N,
                      "accountid": data.Items[i].accountid.S
                  },
                  UpdateExpression: "set #uu = :x",
                  ExpressionAttributeValues: {
                      ":x": {"BOOL": false}
                  },
                  ExpressionAttributeNames: {
                       '#uu': "isRelevant",
                       '#date': "date"
                  }
              };

              docClient.update(params, function(err, data) {
                  if (err) console.log(err);
                  else {
                      console.log('worked');
                  }
              });

Что не так в этом коде?Я перепробовал все возможные способы, но все равно не работает!

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Если ваш date идентификатор не Key в DynamoDB, чем вы должны использовать в ConditionExpression

Пример:

let queryParams = {
      TableName: "test",
      Key: {
        'accountid': data.Items[i].accountid
      },
      UpdateExpression: "set #uu = :x",
      ConditionExpression: 'date = :date',
      ExpressionAttributeValues: {
        ':x': false,
        ':date': data.Items[i].date,
      },
      ExpressionAttributeNames: {
        '#uu': "isRelevant"
   }
};
0 голосов
/ 24 октября 2018

Вам не нужно использовать сопоставление имен атрибутов для ваших ключей в динамо.

В данный момент вы читаете params, как будто у вас есть ключ с именем '#date' и что вы случайно объявили атрибутназывается '#date', который вы не используете.

Вместо этого попробуйте:

var params = {
  TableName: "test",
  Key: { "date": data.Items[i].date, "accountid": data.Items[i].accountid },
  UpdateExpression: "set #uu = :x",
  ExpressionAttributeValues: { ":x": false },
  ExpressionAttributeNames: { '#uu': "isRelevant" }
};

Также - при использовании DynamoDB.DocumentClient вы должны использовать значения JSON, и он будет работать ссортировка информации в формате динамо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...