J'utilise une structure JSON pour stocker les détails d'une personne. Fondamentalement, le nom, le téléphone, l'horodatage enregistré, etc. seront d'autres attributs et la clé primaire sera l'adresse e-mail.
les emplacements marqués, les emplacements visités, searchHistory et recommendation sont les listes ou la carte comme AWS l'appelle. Il contiendra de nombreux objets JSON.
Structure 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"
}
]
}
Depuis l'application, si l'utilisateur visite un nouvel emplacement, je dois ajouter un nouvel objet JSON aux -Localisés marqués. Ainsi, les emplacements marqués devraient ressembler à quelque chose-
"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"
}
]
Code/Schéma
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}
};
J'ai vérifié -
Dans DynamoDB, comment ajouter un élément à un champ de liste à l'aide de Java link
mise à jour d'un tableau JSON dans AWS dynamoDB link
Mise à jour d'un ensemble dans Dynamo db à l'aide de Node Js link
comment mettre à jour un élément dans dynamoDB en utilisant nodejs? lien
Et vérifié les documents AWS pour API UpdateItem . Je n'ai rien trouvé de pertinent à mon problème/doute.
Pouvez-vous me dire s'il existe un moyen d'ajouter le tableau JSON avec un nouvel objet JSON dans NodeJS? Je ne suis pas en mesure de procéder sur la façon de mettre en œuvre la même chose.
[~ # ~] ou [~ # ~]
Dois-je créer une table distincte pour chaque baie et avoir le courrier électronique comme clé primaire et l'horodatage comme clé de tri et continuer?
PS: Je suis nouveau sur DynamoDB, j'ai déjà travaillé avec MongoDB et il existe des moyens de travailler avec des tableaux et des objets JSON. Impossible de trouver un moyen ici.
Utilisez list_append()
et if_not_exists()
ensemble dans un pdateExpression pour ajouter à une colonne de liste potentiellement inexistante:
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)