当前位置:  开发笔记 > 编程语言 > 正文

DynamoDB:如何附加到文档中的列表值

如何解决《DynamoDB:如何附加到文档中的列表值》经验,为你挑选了1个好方法。

我有一个DynamoDB表,用户,其文档结构类似于以下内容:

{
  "id": "1",
  "name": "john",
  "hobbies": [
    {
      "description": "painting",
      "skill": "amateur"
    },
    {
      "description": "cooking",
      "skill": "expert"
    }
  ]
}

可以看出,文档结构包含列表属性,爱好,可以包含业余爱好"对象"的集合.

我想编写一个更新语句,以便在列表属性中添加新元素(如果它尚不存在).

例如,我希望能够将具有"设计"的"描述"和"业余"的"技能"的爱好传递给我的更新功能,并且,因为这个爱好还没有出现在爱好列表中,所以应该添加到列表中.如果爱好已经存在,则不应再次添加.

我在Node.js工作,因此使用JavaScript和带有参数映射的AWS.DynamoDB.DocumentClient()来执行我的功能.该AWS文档是有帮助的,但我在努力寻找如何设置PARAMS有条件地追加项目的列表属性为我所描述的例子.有没有人对如何做到这一点有一些建议?



1> idbehold..:

您可以在UpdateExpression中使用list_append()if_not_exists()一起附加到可能不存在的列表列,但如果列表中已存在具有相同属性的对象,则无法阻止附加到该列表.

作为替代方案,您可以JSON.stringify()在插入之前用" 字符串集"替换您的"爱好"列表,并将其替换为每个"hobbie"(JSON.parse()在读取值时将其替换掉):

var AWS = require('aws-sdk')
var DB = new AWS.DynamoDB.DocumentClient()
var hobbieToAdd = JSON.stringify({
  description: "designing",
  skill: "amateur"
})
DB.update({
  TableName: "TableName",
  Key: { id: "1" },
  UpdateExpression: "ADD #hobbies :hobbie",
  ExpressionAttributeNames: { "#hobbies" : "hobbies" },
  ExpressionAttributeValues: { ":hobbie": DB.createSet([hobbieToAdd]) }
})

使用字符串集将确保永远不会出现重复项,但它还要求您(自己)自己序列化业余爱好.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有