Comment mettre à jour les données de liste nestedes dans dynamodb à l’aide de document client

J’ai une table dynamoDB qui a un élément qui comprend un ID utilisateur et une liste de listes. Cela ressemble à ceci:

Item: { UserId: 'abc123', Lists: [ { id: 1, title: 'My favorite movies', topMovies: [ { id: 1, title: 'Caddyshack' }, { id: 2, title: 'Star Wars' } ] } ] } 

Permet maintenant à l’utilisateur de créer une nouvelle liste intitulée “Mes émissions de télévision préférées” et de l’insérer dans le tableau Lists avec l’id: 2.

Comment pourrais-je mettre à jour cet object à l’aide de document client. J’ai parcouru plusieurs exemples et je n’ai rien trouvé qui explique ce que j’essaie de faire. Cela me fait penser que je n’utilise peut-être pas correctement DynamoDB et que je devrais avoir un schéma d’object différent.

J’ai essayé d’utiliser ceci, mais cela écrase mon précédent object.

 exports.handler = (event, context, callback) => { console.log(event); const params = { TableName: "top-ten", Key: { "UserId": 'abc123', }, UpdateExpression: "set Lists =:newItem", ExpressionAtsortingbuteValues: { ":newItem": { "id": 2, "title": "Favorite TV Shows", "topMovies": [{"id": 1, "title" : "The Simpsons"}] }, }, ReturnValues: "UPDATED_NEW" }; dynamodb.update(params, function(err, data) { if (err) { console.log(err); callback(err); } else { console.log(data); callback(null, data); } }); 

};

EDIT: Ok, j’ai compris que si je mets

  UpdateExpression: "set Lists[1] =:newItem" 

il met à jour l’élément correctement. Mais maintenant, comment puis-je savoir le nombre d’éléments contenus dans mon tableau de liste?

Vous devriez utiliser list_append . La fonction ajoute deux listes ensemble, vous devez donc créer votre élément pour append une liste.

 exports.handler = (event, context, callback) => { console.log(event); const params = { TableName: "top-ten", Key: { "UserId": 'abc123', }, UpdateExpression : "SET #attrName = list_append(#attrName, :attrValue)", ExpressionAtsortingbuteNames : { "#attrName" : "Lists" }, ExpressionAtsortingbuteValues : { ":attrValue" : [{ "id": 2, "title": "Favorite TV Shows", "topMovies": [{"id": 1, "title" : "The Simpsons"}] }] }, ReturnValues: "UPDATED_NEW" }; dynamodb.update(params, function(err, data) { if (err) { console.log(err); callback(err); } else { console.log(data); callback(null, data); } });