Javascript 使用NodeJS将新对象附加到DynamoDB中的JSON数组

Javascript 使用NodeJS将新对象附加到DynamoDB中的JSON数组,javascript,json,node.js,amazon-web-services,amazon-dynamodb,Javascript,Json,Node.js,Amazon Web Services,Amazon Dynamodb,我使用JSON结构来存储个人的详细信息。基本上,姓名、电话、registeredTimestamp等是其他属性,主键是电子邮件地址 标记位置、访问位置、搜索历史记录和推荐是AWS所称的列表或地图。它将包含许多JSON对象 JSON结构- { "name":"Mama Miya", "phone":"9383883223", "registeredTimestamp":"some-time", "lastActiveTimestamp":"some-time",

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

标记位置、访问位置、搜索历史记录和推荐是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"
        }
    ]
}
从应用程序中,如果用户访问一个新位置,我需要向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"
    }
]
代码/模式-

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数组

  • 使用节点Js更新Dynamo db中的集合

  • 如何使用nodejs更新dynamoDB中的项

  • 并检查了AWS文档中的内容。我没有发现任何与我的问题/疑问有关的东西

请告诉我是否有一种方法可以在NodeJS中用一个新的JSON对象附加JSON数组?我无法继续讨论如何实施同样的计划

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

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

在中使用and并将其附加到可能不存在的列表列:

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)

你知道如何用Javascript实现吗?你会这么做的。Node.JS使用Javascript。@RobertHarvey没有。我不知道如何用JS解决这个问题。整个AWS文档都有使用Java、PHP和.Net的示例和API演示。我不确定要使用什么API或如何构造代码。我列出的StackOverflow问题要么根本没有答案,要么主要是替换现有值。我需要附加到现有的数组中。听起来你好像在试图为一个简单的操作找到一个API或库,这个操作应该可以用Javascript轻松完成。看一看,尤其是。您不需要NodeJS、Dynamo或其他任何东西来完成此任务。注意那篇文章的作者犯了和你一样的错误;您也不需要jQuery来完成此操作。@RobertHarvey谢谢您纠正我的错误。但是,再次回到问题上来,假设我在DynamoDB中已经有两个数组中的对象(前面提到的object literal),那么我如何向它附加另一个对象呢?如何在DB上执行
拼接
推送
操作?“这是不可能的,对吗?”罗伯塔维用图式结构更新了我的问题。这正是我一直在寻找的东西。将对其进行测试和更新。非常感谢。请告诉我数组中每个对象应该使用什么属性类型?它应该是一个列表吗?@bozzmob如果你像我在回答中那样使用DocumentClient,那么你根本不需要关心DyanmoDB内部类型。DocumentClient会在内部将
markedLocations
列表中的每个项目强制转换为映射类型。因此,
markedLocations
最终将成为一个地图列表。我没有意识到要附加的对象必须包装在一个数组中。它看起来更像是一个数组合并,而不是一个附加。合并意味着可以替换/覆盖“目标”数组中的值。这里的情况并非如此。我同意一个更好的术语可能是
list\u concat
。但是在这两种情况下,该函数都将数组作为输入,这使得它比只附加单个项的函数更灵活。这样,如果要附加多个项,则可以在单个调用中而不是在多个调用中完成。