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.
Réponses
Trop de publicités?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
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).