JSON構造を使用して、個人の詳細を保管しています。基本的に、名前、電話番号、registeredTimestampなどがその他の属性になり、主キーはメールアドレスになります。
markLocations、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に追加する必要があります。したがって、markedLocationsは次のようになります。
"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 link を使用してリストフィールドに要素を追加する方法
aWS dynamoDBでのJSON配列の更新 link
Node Js link を使用してDynamo dbでセットを更新する
nodejsを使用してdynamoDBのアイテムを更新する方法 リンク
そして、AWSドキュメントで pdateItem API を確認しました。私の問題や疑問に関連するものは何も見つかりませんでした。
NodeJSでJSON配列に新しいJSONオブジェクトを追加する方法があるかどうか教えてください。これを実装する方法を進めることができません。
[〜#〜]または[〜#〜]
アレイごとに個別のテーブルを作成し、電子メールを主キー、タイムスタンプをソートキーとして使用して続行しますか?
PS:私はDynamoDBを初めて使用しました。以前にMongoDBを使用したことがあり、そこでJSON配列とオブジェクトを使用する方法があります。ここで方法を見つけることができません。
list_append()
とif_not_exists()
を pdateExpression で一緒に使用して、存在しない可能性のあるリスト列に追加します。
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)