обновить список карт в Динамодбе - PullRequest
0 голосов
/ 25 февраля 2019

Ниже моя структура DynamoDB:

{
  id : "Sample_id",
  details: {
     wf: [{
      wid: "12345",
      wname: "name_1"  
    }]
  }
}

Теперь я хочу добавить новый объект карты в "wf", я пробовал ADD и SET с обновлением, но оба заменяли существующий объект новым.

Ниже приведен код, который я пробовал

var params = {
      TableName: p_table,
      Key: {
           "id" : "Sample_id"
      },
      UpdateExpression: "SET details.wf = list_append(details.wf, :vals)",
      ExpressionAttributeValues: { 
          ":vals" : [{'wid': "98765", 'wname': 'name_2'}]
      }
};

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

Токовый выход с кодом выше:

{
   id : "Sample_id",
   details: {
      wf: [{
          wid: "98765",
          wname: "name_2"  
        }]
     }
 }

Ожидаемый выход:

{
   id : "Sample_id",
   details: {
      wf: [{
          wid: "12345",
          wname: "name_1"  
        },
        {
          wid: "98765",
          wname: "name_2"  
        }]
     }
 }

Как мне добиться ожидаемого выхода

1 Ответ

0 голосов
/ 26 февраля 2019

Обновил мой объект param ниже, и он работал для меня.

Добавлен индекс 99999 (некоторый большой случайный индекс, за пределы которого я не ожидаю роста моего списка), несмотря на индекс 99999 при добавленииданные в лямбде к существующему списку располагаются со следующим доступным индексом

var params = {
      TableName: p_table,
      Key: {
           "id" : "Sample_id"
      },
      UpdateExpression: "SET details.wf[999999] = :vals",
      ExpressionAttributeValues: { 
          ":vals" : {'wid': "98765", 'wname': 'name_2'}
      }
};

ddb.update(params, function(err, data) { 
  if(err)   
   console.log(err);
  else
   console.log(data)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...