DynamoDB更新列表项列表

时间:2018-08-20 14:27:42

标签: amazon-web-services aws-lambda amazon-dynamodb

我需要您的帮助来更新/添加DynamoDB列表列表中的项目。

我想添加和更新由列表组成的列表。 我怎样才能做到这一点?谢谢您的帮助

以下是我的示例:

数据库

Item{1}
       idProject:"15azeze-55ze"
       dateCreationProjectString:   08/01/2018 14:6:32  
       environnements:    List[1]   
          0 MAP {3}
              idEnvironnement: "11-aa",
              name:"Exemple Environnement"
              tasks[0]

NodeJS代码:

let newTask =  {
   authorTask :      "Toto",
   dateCreationTask: "01/01/1960",
   idTask:           "154-141-aa41",
   nameTask:         "Task name ..."
};



dynamodbdc.update({
    TableName: "projects",
    Key: { idProject: "15azeze-55ze", idEnvironnement:"11-aa" },
    ReturnValues: 'ALL_NEW',
    UpdateExpression: 'set #environnements.#tasks = list_append(if_not_exists(#environnements.#tasks, :empty_list), :newTask)',
    ExpressionAttributeNames: {
      '#environnements' : 'environnements',
      '#tasks'          : 'tasks',
    },
    ExpressionAttributeValues: {
      ':newTask': [newTask],
      ':empty_list': []
    }
  }, function(error, stdout) {
          if(error){
            console.log("error==", error)                
          else {            
             console.log("Nice thank you !!")
          } 
  });

1 个答案:

答案 0 :(得分:0)

我建议将tasks属性保留为SET('SS'),这样可以简化为 NOT (添加)。否则,将很难实现该方案。

此外,您可以使用environments属性列表的索引来正确形成更新表达式。 dynamodb api中没有用于自动锻炼索引的选项。

如果您将tasks属性定义为SET,则下面的代码应该可以工作。

插入商品代码:-

var params = {
    TableName : table,
    Item : {
        "idProject" : "15azeze-55ze",
        "dateCreationProjectString" : Date(),
        "environnements" : [{
      "idEnvironnement" : "11-aa",
      "name" : "Example Environments",
      "tasks" : docClient.createSet(["1"])
    }]
    }
};

console.log("Adding a new item...");
docClient.put(params, function(err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err,
                null, 2));
    } else {
        console.log("Added item:", JSON.stringify(data, null, 2));
    }
});

示例更新项目工作代码:-

ADD操作将确保它不会将重复项添加到SET

var docClient = new AWS.DynamoDB.DocumentClient();

var params = {
    TableName: "projects",
    Key: {
        "idProject" : "15azeze-55ze"
    },
    UpdateExpression: 'ADD environnements['+0+'].tasks :tasksVal',
    ExpressionAttributeValues: {
        ":tasksVal": docClient.createSet(["2"])
    },
    ReturnValues: "UPDATED_NEW"
};

console.log("Updating the item...");
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));
    }
});