web-dev-qa-db-fra.com

Quelle est la différence entre les méthodes insert (), insertOne () et insertMany ()?

Quelle est la différence entre les méthodes insert(), insertOne() et insertMany() sur MongoDB. Dans quelle situation devrais-je utiliser chacun?

J'ai lu les docs, mais ce n'est pas clair quand on les utilise.

42
Marcos Mendes

Quelle est la différence entre les méthodes insert (), insertOne () et insertMany () sur MongoDB

  • db.collection.insert() comme indiqué dans la documentation insère un ou plusieurs documents dans une collection et renvoie un objet WriteResult pour les insertions uniques et un BulkWriteResult objet pour les insertions en vrac.

    > var d = db.collection.insert({"b": 3})
    > d
    WriteResult({ "nInserted" : 1 })
    > var d2 = db.collection.insert([{"b": 3}, {'c': 4}])
    > d2
    BulkWriteResult({
            "writeErrors" : [ ],
            "writeConcernErrors" : [ ],
            "nInserted" : 2,
            "nUpserted" : 0,
            "nMatched" : 0,
            "nModified" : 0,
            "nRemoved" : 0,
            "upserted" : [ ]
    })
    
  • db.collection.insertOne() comme indiqué dans la documentation insère un document dans une collection et renvoie un document qui se présente comme suit:

    > var document = db.collection.insertOne({"a": 3})
    > document
    {
            "acknowledged" : true,
            "insertedId" : ObjectId("571a218011a82a1d94c02333")
    }
    
  • db.collection.insertMany() insère plusieurs documents dans une collection et renvoie un document ressemblant à ceci:

    > var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
    > res
    {
            "acknowledged" : true,
            "insertedIds" : [
                    ObjectId("571a22a911a82a1d94c02337"),
                    ObjectId("571a22a911a82a1d94c02338")
            ]
    }
    

Dans quelle situation devrais-je utiliser chacun?

La méthode insert() est obsolète dans le pilote principal. Vous devez donc utiliser la méthode .insertOne() chaque fois que vous souhaitez insérer un seul document dans votre collection et le code .insertMany Lorsque vous le souhaitez. insérer plusieurs documents dans votre collection. Bien sûr, cela n’est pas mentionné dans la documentation, mais le fait est que personne n’écrit vraiment une application dans le shell. La même chose s'applique à updateOne , updateMany , deleteOne , deleteMany , findOneAndDelete , findOneAndUpdate et findOneAndReplace . Voir Aperçu des opérations d'écriture .

65
styvane
  1. db.collection.insert():

    Il vous permet d'insérer un ou plusieurs documents dans la collection. Syntaxe:

    • Insertion simple: db.collection.insert({<document>});
    • Insert multiple:

      db.collection.insert ([ ...]);

    Retourne un objet WriteResult: WriteResult({ "nInserted" : 1 });

  2. db.collection.insertOne():

    Il vous permet d'insérer exactement 1 document dans la collection. Sa syntaxe est la même que celle d'une seule insertion dans insert().

    Renvoie le document suivant:

    {
       "acknowledged" : true,
       "insertedId" : ObjectId("56fc40f9d735c28df206d078")
    }
    
  3. db.collection.insertMany():

    Il vous permet d'insérer un tableau de documents dans la collection. Syntaxe:

    db.collection.insertMany(
        { [ <document 1> , <document 2>, ... ] });
    

    Renvoie le document suivant:

    {
       "acknowledged" : true,
       "insertedIds" : [
          ObjectId("562a94d381cb9f1cd6eb0e1a"),
          ObjectId("562a94d381cb9f1cd6eb0e1b"),
          ObjectId("562a94d381cb9f1cd6eb0e1c")
       ]
    }
    

Ces trois options vous permettent également de définir une writeConcern personnalisée et de créer une collection si elle n’existe pas.

8
ayushgp

Il existe également une différence dans la gestion des erreurs, vérifiez ici . La commande insert renvoie un document dans les cas de réussite et d'erreur. Mais les commandes insertOne et insertMany lèvent des exceptions . Les exceptions sont plus faciles à gérer dans le code que d’évaluer le document renvoyé pour résoudre les erreurs. Probablement la raison pour laquelle ils sont déconseillés dans les pilotes, comme indiqué dans la réponse de sstyvane.

3
Andrew Nessin