首页 > 解决方案 > 更新 Dynamodb 中的地图列表

问题描述

下面是我的 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"  
        }]
     }
 }

我怎样才能达到预期的效果

标签: node.jsaws-lambda

解决方案


将我的参数对象更新到下面,它对我有用

添加了一个索引 99999(一些大的随机索引,我不希望我的列表增长超出该索引),尽管索引 99999 同时将 lambda 中的数据附加到它与下一个可用索引所在的现有列表

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)
});

推荐阅读