使用NodeJS将新对象附加到DynamoDB中的JSON数组 [英] Append a new object to a JSON Array in DynamoDB using NodeJS
问题描述
我正在使用JSON结构存储一个人的详细信息。基本上,名称,电话,registeredTimestamp等将是其他属性,主键将是电子邮件地址。
I am using a JSON structure to store details of a person. Basically name, phone, registeredTimestamp etc., will be other attributes, and Primary key will be the email address.
markedLocations,受访位置,searchHistory和推荐是列表或地图正如AWS所称。它将包含许多JSON对象。
markedLocations, visitedLocations, searchHistory and recommendation are the lists or Map as AWS calls it. It will contain many JSON objects.
JSON结构-
{
"name":"Mama Miya",
"phone":"9383883223",
"registeredTimestamp":"some-time",
"lastActiveTimestamp":"some-time",
"signinType":"facebook",
"additionalSigninData":{
"key1":"value1",
"key2":"value2"
},
"markedLocations":[
{
"latitude":"77.33",
"longitude":"12.33",
"name":"Home",
"description":"my new home",
"placeid":"55334433",
"image":"url/abc.png"
}
]
}
在应用中,如果用户访问了新位置,我需要向 markedLocations 添加一个新的JSON对象。
因此,markedLocations应该看起来像-
From the app, if the user visits a new location, I need to add a new JSON Object to the markedLocations. So the markedLocations should look something like-
"markedLocations":[
{
"latitude":"77.33",
"longitude":"12.33",
"name":"Home",
"description":"my new home",
"placeid":"55334433",
"image":"url/abc.png"
},{
"latitude":"22.11",
"longitude":"22.55",
"name":"Ocean",
"description":"Ocean",
"placeid":"32423423",
"image":"url/icean.png"
}
]
代码/架构-
var item = {
'email': {'S': req.body.email},
'phone': {'S': req.body.phone},
'registeredTimestamp': {'S': req.body.registeredTimestamp},
'lastActiveTimestamp': {'S': req.body.lastActiveTimestamp},
'signinType': {'S': req.body.signinType},
'version': {'S': req.body.version},
'markedLocations': {'L': req.body.markedLocations}
};
我检查了-
-
在DynamoDB中,如何使用Java 链接
在AWS dynamoDB中更新JSON数组链接
updating a JSON array in AWS dynamoDB link
使用Node Js在Dynamo数据库中更新集合链接
Updating a Set in Dynamo db using Node Js link
如何使用nodejs更新dynamoDB中的项目? 链接
how to update item in dynamoDB using nodejs? link
并检查了AWS文档中的 UpdateItem API 。我没有发现与我的问题/疑问有关的任何东西。
And checked AWS docs for UpdateItem API. I didn't find anything relevant to my problem/doubt.
请告诉我是否有办法在NodeJS中用新的JSON对象附加JSON数组?我无法继续执行相同的操作。
Please can you tell me if there is a way to append the JSON array with a new JSON object in NodeJS? I am not able proceed on how to implement the same.
OR
我应该为每个数组创建一个单独的表,并将电子邮件作为主键,将时间戳作为排序键然后继续吗?
Should I create separate table for each Array and have email as primary key and timestamp as sort key and proceed?
PS:我是DynamoDB的新手,我与MongoDB较早,那里有使用JSON数组和对象的方法。
PS: I am new to DynamoDB, I've worked with MongoDB earlier and there are ways to work with JSON arrays and objects there. Unable to find a way here.
推荐答案
使用 list_append()
和 if_not_exists()
一起在 UpdateExpression 附加到可能不存在的列表列:
Use list_append()
and if_not_exists()
together in an UpdateExpression to append to a potentially non-existent list column:
var AWS = require('aws-sdk')
var DB = new AWS.DynamoDB.DocumentClient()
function appendMarkedLocation (personId, location) {
return DB.update({
TableName: 'people',
Key: { id: personId },
ReturnValues: 'ALL_NEW',
UpdateExpression: 'set #markedLocations = list_append(if_not_exists(#markedLocations, :empty_list), :location)',
ExpressionAttributeNames: {
'#markedLocations': 'markedLocations'
},
ExpressionAttributeValues: {
':location': [location],
':empty_list': []
}
}).promise()
}
appendMarkedLocation('somePeronId', {
latitude: '22.11',
longitude: '22.55',
name: 'Ocean',
description: 'Ocean',
placeid: '32423423',
image: 'url/icean.png'
}).then(console.log)
这篇关于使用NodeJS将新对象附加到DynamoDB中的JSON数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!