Не удалось обновить DynamoDB из функции Lambda - PullRequest
0 голосов
/ 19 мая 2018

У меня проблема с обновлением записи DynamoDB.

БД выглядит следующим образом

{
   "userId":"amzn1.ask.account.XYZ",
   "mapAttr":{
      "name":"John",
      "colors":[
         "yellow",
         "white"
      ]
   }
}

Я хочу обновить список цветов, используя следующий код:

var docClient = new AWS.DynamoDB.DocumentClient({ apiVersion: "2012-08-10" });
var params = {
  TableName: "myTable",

  Key: {
    userId: userId
  },
  UpdateExpression: "SET #mapAttr = list_append(#mapAttr, :entry)",

  ExpressionAttributeNames: { "#mapAttr": "mapAttr.colors" },

  ExpressionAttributeValues: {
    ":entry": ["blue"]
  },

  ReturnValues: "UPDATED_NEW"
};

docClient.update(params, function(err, data) {
  if (err) {
    console.error(
      "Unable to update item. Error JSON:",
      JSON.stringify(err, null, 2)
    );
  } else {
    console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
  }
}); 

и я получаю следующее сообщение:

Невозможно обновить элемент.Ошибка JSON: {"message": "Предоставленный ключевой элемент не соответствует схеме", "code": "ValidationException",

Есть идеи, почему ...?

1 Ответ

0 голосов
/ 20 июня 2018

За Документация AWS , вам нужно разделить ваш ExpressionAttributeNames вверх.

UpdateExpression: "SET #mapAttr.#colors = list_append(#mapAttr.#colors, :entry)",
ExpressionAttributeNames: { 
    "#mapAttr": "mapAttr", 
    "#colors": "colors"
}
...