Я пытаюсь обновить элемент, изменив значение 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');
                  }
              });

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

1
AmazingDayToday 24 Окт 2018 в 00:46

2 ответа

Лучший ответ

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

На данный момент параметры читаются так, как будто у вас есть ключ с именем '#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, и он будет обрабатывать информацию о маршалинге в формате динамо-типа.

0
thomasmichaelwallace 23 Окт 2018 в 22:21

Если ваш 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
IftekharDani 24 Окт 2018 в 05:49
52958274