web-dev-qa-db-fra.com

Comment retourner l'élément inséré dans dynamoDB

J'utilise nodeJS sdk pour mettre l'élément à dynamoDB, l'élément est:

{
   "eventId": date + '-' + eventName + '-' + eventPurpose,
   "eventName": eventName,
   "eventPurpose": eventPurpose,
   "eventDates": eventDates,
   "attendees": attendees
 }

Le code actuel pour mettre l'élément dans dynamoDB:

  const params = {
    TableName: "event",
    Item: {
        "eventId": date + '-' + eventName + '-' + eventPurpose,
        "eventName": eventName,
        "eventPurpose": eventPurpose,
        "eventDates": eventDates,
        "attendees": attendees
    },
    ReturnValues: "ALL_OLD"
  };

  dynamo.put(params, (err, data) => {
    console.log("coming here");
    if (err) {
      console.log("error : " + JSON.stringify(err));
    }
    console.log("data" + JSON.stringify(data));
    cb(null, data);
  });

L'insertion se déroule correctement et la valeur de retour est un objet vide.

Je souhaite retourner l'article inséré. J'ai trouvé cela doc . Mais cela ne revient qu'en cas de mise à jour de l'ancienne valeur. Je n'ai trouvé aucune autre information utile que celle-ci.

Y a-t-il un problème ou nous devons simplement interroger en utilisant la méthode get avec la clé primaire?

23
Lakshman Diwaakar

Le lien que vous avez publié est, malheureusement, la seule vraie réponse pour le moment (API Version 2012-08-10). PutItem peut retourner des éléments juste avant leur mise à jour ou aucun du tout.

Le paramètre ReturnValues est utilisé par plusieurs opérations DynamoDB; cependant, PutItem ne reconnaît aucune valeur autre que NONE ou ALL_OLD.

En bref, la seule façon fiable de récupérer votre objet inséré est de GetItem , comme vous l'avez supposé .

18
Diego Ferri

Passez juste le params.Item dans le rappel:

 dynamo.put(params, (err, data) => {
        if (err) {
          cb(err);
        }
        cb(null, params.Item);
      });

Passez également le err dans le rappel;)

15
Sigma

Notez que c'est l'élément que vous insérez, auquel vous avez déjà accès:

{
    "eventId": date + '-' + eventName + '-' + eventPurpose,
    "eventName": eventName,
    "eventPurpose": eventPurpose,
    "eventDates": eventDates,
    "attendees": attendees
}

Vous pouvez simplement changer votre code en ceci, puis vous auriez déjà l'élément inséré dans la variable item:

var item = {
        "eventId": date + '-' + eventName + '-' + eventPurpose,
        "eventName": eventName,
        "eventPurpose": eventPurpose,
        "eventDates": eventDates,
        "attendees": attendees
    };

const params = {
    TableName: "event",
    Item: item,
    ReturnValues: "ALL_OLD"
  };

Vous semblez confus quant à ce que vous insérez, car vous commencez votre question en montrant un objet que vous dites que vous insérez, mais le code que vous avez publié insère un objet légèrement différent.

3
Mark B