web-dev-qa-db-fra.com

Existe-t-il une option "upsert" dans la commande mongodb insert?

Je sais que c’est peut-être une question idiote, mais j’ai lu dans un e-book qu’il existe une option upsert dans MongoDB insert. Je n'ai pas pu trouver la documentation appropriée à ce sujet. Quelqu'un peut-il m'informer à ce sujet?

47
astroanu

Puisque upsert est défini comme une opération qui " crée un nouveau document quand aucun document ne correspond aux critères de la requête ", il n'y a pas de place pour upsertsin insert commande. C'est une option pour la commande update. Si vous exécutez une commande comme ci-dessous, cela fonctionne comme un update, s'il existe un document correspondant à query, ou comme un insert avec le document décrit par update comme argument .

db.collection.update(query, update, {upsert: true})

MongoDB 3.2 ajoute replaceOne :

db.collection.replaceOne(query, replacement, {upsert: true})

qui a un comportement similaire, mais son replacement ne peut pas contenir d'opérateurs de mise à jour.

104
zero323

Comme dans les liens fournis par PKD, db.collection.insert() ne fournit aucune possibilité d'upsert. Au lieu de cela, mongo insert insère un nouveau document dans une collection. Upsert n'est possible qu'avec db.collection.update() et db.collection.save().

S'il vous arrive de passer un document à db.collection.insert() qui est déjà dans la collection et a donc un _id Similaire à un _id Existant, une exception de clé dupliquée sera alors générée.

5
glormph