首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用NodeJS将新对象追加到DynamoDB中的JSON数组

使用NodeJS将新对象追加到DynamoDB中的JSON数组
EN

Stack Overflow用户
提问于 2016-12-31 01:57:20
回答 1查看 20.1K关注 0票数 44

我正在使用JSON结构来存储一个人的详细信息。基本上,姓名、电话、registeredTimestamp等将是其他属性,主键将是电子邮件地址。

markedLocations、visitedLocations、searchHistory和推荐是亚马逊网络服务所称的列表或地图。它将包含许多JSON对象。

JSON结构-

代码语言:javascript
复制
{
    "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应该看起来像这样-

代码语言:javascript
复制
"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"
    }
]

代码/架构-

代码语言:javascript
复制
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}
    };

我查过了-

如何使用Java link

  • updating a JSON数组将元素附加到列表字段中使用nodejs link

  • how在Dynamo db中设置
  • 以使用DynamoDB更新dynamoDB中的项目?link
  • And已检查AWS文档中的UpdateItem API。我没有找到任何与我的problem/doubt.

相关的东西

你能告诉我有没有办法在NodeJS中给JSON数组追加一个新的JSON对象?我无法继续讨论如何实现相同的功能。

我是否应该为每个Array创建单独的表,并将电子邮件作为主键,将时间戳作为排序键,然后继续?

PS:我是DynamoDB的新手,我以前使用过MongoDB,有很多方法可以在那里使用JSON数组和对象。在这里找不到路。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-31 04:43:44

UpdateExpression中同时使用list_append()if_not_exists()可追加到可能不存在的列表列:

代码语言:javascript
复制
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)
票数 88
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41400538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档