boz*_*mob 20 javascript json amazon-web-services node.js amazon-dynamodb
我使用JSON结构来存储一个人的详细信息.基本上名称,电话,registeredTimestamp等将是其他属性,主键将是电子邮件地址.
markedLocations,visitedLocations,searchHistory和recommended是AWS调用它的列表或映射.它将包含许多JSON对象.
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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在应用程序中,如果用户访问新位置,我需要向markedLocations添加新的JSON对象.因此,标记的地点应该看起来像 -
"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"
}
]
Run Code Online (Sandbox Code Playgroud)
代码/ Schema-
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}
};
Run Code Online (Sandbox Code Playgroud)
我检查了 -
在DynamoDB中,如何使用Java 链接将元素附加到列表字段
在AWS dynamoDB 链接中更新JSON数组
使用Node Js 链接更新Dynamo db中的Set
如何使用nodejs更新dynamoDB中的项目?链接
并检查了适用于UpdateItem API的 AWS文档.我没有发现任何与我的问题/疑问相关的内容.
请问您是否有办法在NodeJS中使用新的JSON对象附加JSON数组?我无法继续实施相同的方法.
要么
我应该为每个数组创建单独的表,并将电子邮件作为主键,时间戳作为排序键并继续?
PS:我是DynamoDB的新手,我之前使用过MongoDB,并且有很多方法可以使用JSON数组和对象.无法在这里找到方法.
idb*_*old 42
在UpdateExpression中使用list_append()和if_not_exists()一起追加到可能不存在的列表列:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9037 次 |
| 最近记录: |