Sta*_*ley 8 javascript lambda node.js amazon-dynamodb
我有一个DynamoDB表,用户,其文档结构类似于以下内容:
{
"id": "1",
"name": "john",
"hobbies": [
{
"description": "painting",
"skill": "amateur"
},
{
"description": "cooking",
"skill": "expert"
}
]
}
Run Code Online (Sandbox Code Playgroud)
可以看出,文档结构包含列表属性,爱好,可以包含业余爱好"对象"的集合.
我想编写一个更新语句,以便在列表属性中添加新元素(如果它尚不存在).
例如,我希望能够将具有"设计"的"描述"和"业余"的"技能"的爱好传递给我的更新功能,并且,因为这个爱好还没有出现在爱好列表中,所以应该添加到列表中.如果爱好已经存在,则不应再次添加.
我在Node.js工作,因此使用JavaScript和带有参数映射的AWS.DynamoDB.DocumentClient()来执行我的功能.该AWS文档是有帮助的,但我在努力寻找如何设置PARAMS有条件地追加项目的列表属性为我所描述的例子.有没有人对如何做到这一点有一些建议?
您可以在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]) }
})
Run Code Online (Sandbox Code Playgroud)
使用字符串集将确保永远不会出现重复项,但它还要求您(自己)自己序列化业余爱好.
| 归档时间: |
|
| 查看次数: |
5053 次 |
| 最近记录: |