簡體   English   中英

使用 NodeJS 將新對象附加到 DynamoDB 中的 JSON 數組

[英]Append a new object to a JSON Array in DynamoDB using NodeJS

我正在使用 JSON 結構來存儲一個人的詳細信息。 基本上姓名、電話、注冊時間戳等將是其他屬性,主鍵將是電子郵件地址。

MarkedLocations、visitedLocations、searchHistory 和推薦是 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"
        }
    ]
}

從應用程序中,如果用戶訪問一個新位置,我需要將一個新的 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 數組

  • 使用 Node Js 鏈接更新 Dynamo 數據庫中的 Set

  • 如何使用nodejs更新dynamoDB中的項目? 關聯

  • 並檢查了UpdateItem API 的AWS 文檔。 我沒有發現任何與我的問題/懷疑相關的內容。

請您告訴我是否有辦法在 NodeJS 中使用新的 JSON 對象附加 JSON 數組? 我無法繼續如何實施相同的內容。

或者

我是否應該為每個數組創建單獨的表,並將電子郵件作為主鍵,將時間戳作為排序鍵並繼續?

PS:我是 DynamoDB 的新手,我之前使用過 MongoDB,有很多方法可以在那里使用 JSON 數組和對象。 無法在這里找到方法。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM