62 votes

MongoDB upsert - insertion ou mise à jour

Je ne trouve pas cela dans la documentation, à aucun des endroits évidents. J'aimerais savoir s'il est possible de savoir si Mongo a exécuté une insertion ou une mise à jour dans l'opération upsert ? Merci.

37voto

Sammaye Points 21778

En effet, lors d'un appel sûr (ou getLastError), la fonction de mise à jour renvoie un tableau contenant un champ upsert et un champ updatedExisting.

Vous pouvez lire la version PHP de cet article ici : http://php.net/manual/en/mongocollection.insert.php vers le bas.

Comme il est dit dans la documentation sur upserted :

Si un upsert a eu lieu, ce champ contiendra le champ _id du nouvel enregistrement. Pour les upserts, ce champ ou updatedExisting sera présent (sauf si une erreur s'est produite).

Ainsi, l'upserted contient le _id du nouvel enregistrement si une insertion a été faite ou il incrémentera updatedExisting s'il a mis à jour un enregistrement.

Je suis sûr qu'un phénomène similaire apparaît chez tous les conducteurs.

Modifier

Il s'agira en fait d'un booléen dans le fichier updatedExisting domaine de true ou false

11voto

radekg Points 1055

Pour référence seulement, dans node.js :

collection.update( source, target, { upsert: true }, function(err, result, upserted) {
  ...
});

10voto

hookdump Points 283

Pour référence uniquement, en node.js utilisant Mongoose 3.6 :

model.update( findquery, updatequery, { upsert: true }, function(err, numberAffected, rawResponse) {
  ...
});

La rawResponse ressemble à ceci lorsqu'elle a mis à jour un document existant :

{ updatedExisting: true,
  n: 1,
  connectionId: 222,
  err: null,
  ok: 1 }

Et cela ressemble à ceci quand il a créé un nouveau document :

{ updatedExisting: false,
  upserted: 51eebc080eb3e2208a630d8e,
  n: 1,
  connectionId: 222,
  err: null,

(Dans les deux cas, numberAffected = 1).

6voto

Assem Hafez Points 31

La réponse est tirée du livre "MongoDB Applied Design Patterns". determine whether an upsert was an insert or an update

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X