MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

5 façons d'insérer des documents dans MongoDB

MongoDB propose de nombreuses façons d'insérer des documents dans une collection.

Voici 5 façons d'insérer des documents dans une collection lors de l'utilisation du shell mongo.

Le insertOne() Méthode

Le insertOne() méthode insère un seul document dans une collection.

Son nom complet est db.collection.insertOne() , où collection est le nom de la collection dans laquelle insérer le document.

Voici un exemple d'insertion d'un document dans une collection appelée pets :

db.pets.insertOne( { 
    name: "Scratch", 
    type: "Cat" 
    } ) 

Résultat :

{ "accusé de réception" :vrai, "insertedId" :ObjectId("5fe2d15637b49e0faf1af214")}

Le db.collection.insertOne() méthode renvoie un document contenant :

  • Un booléen acknowledged comme true si l'opération s'est exécutée avec un souci d'écriture ou false si la préoccupation d'écriture était désactivée.
  • Un champ insertedId avec le _id valeur du document inséré.

Le insertMany() Méthode

Le insertMany() la méthode est similaire à insertOne() , sauf qu'il insère plusieurs documents dans une collection.

Également de la même manière que insertOne() , son nom complet est db.collection.insertMany() , où collection est le nom de la collection dans laquelle insérer le document. Cela s'applique à toutes les méthodes répertoriées dans cet article.

Voici un exemple d'utilisation de db.collection.insertMany() pour insérer plusieurs documents dans une collection appelée pets :

db.pets.insertMany([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ]) 

Résultat :

{ "accusé de réception" :vrai, "insertedIds" :[ 1, 2, 3 ] } 

Le db.collection.insertMany() méthode renvoie un document contenant :

  • Un booléen acknowledged comme true si l'opération s'est exécutée avec un souci d'écriture ou false si la préoccupation d'écriture était désactivée.
  • Un tableau de _id valeurs pour chaque document inséré avec succès.

Le insert() Méthode

Le insert() la méthode est comme une combinaison de insertOne() et insertMany() . Il vous permet d'insérer soit un seul document, soit plusieurs documents dans une collection.

Voici un exemple d'utilisation de db.collection.insert() pour insérer un seul document :

db.pets.insert(
    { name: "Bruce", type: "Bat" }
    ) 

Résultat :

WriteResult({ "nInserted" :1 })

Lorsqu'un seul document est inséré, db.collection.insert() renvoie un WriteResult objet. Lorsqu'un tableau de documents est inséré, il renvoie un BulkWriteResult objet.

Voici un exemple d'utilisation de db.collection.insert() pour insérer plusieurs documents.

db.pets.insert([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ]) 

Résultat :

BulkWriteResult({ "writeErrors" :[ ], "writeConcernErrors" :[ ], "nInserted" :3, "nUpserted" :0, "nMatched" :0, "nModified" :0, "nRemoved" :0, "renversé" :[ ]})

Comme mentionné, un BulkWriteResult L'objet est renvoyé lors de l'insertion d'un tableau de documents.

Le bulkWrite() Méthode

Le bulkWrite() La méthode vous permet d'effectuer des opérations d'écriture en masse.

En fait, insertMany() effectue déjà des opérations d'insertion en bloc. Idem avec insert() lors de l'insertion d'un tableau de documents. Mais bulkWrite() vous permet d'effectuer des opérations d'insertion, de mise à jour et de suppression en masse, le tout à partir d'un seul appel de méthode.

Exemple :

db.pets.bulkWrite([
    { insertOne: { "document": { "_id": 1, "name": "Bubbles", "type": "Fish" }}},
    { insertOne: { "document": { "_id": 2, "name": "Wag", "type": "Dog" }}},
    { updateOne : {
        "filter" : { "_id" : 3 },
        "update" : { $set : { "name" : "Fluffy", "type" : "Cat" } },
        "upsert" : true
    } },
    { replaceOne : {
        "filter" : { "_id" : 4 },
        "replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 },
        "upsert" : true
    } }
]) 

Résultat :

{ "acknowledged" :vrai, "deletedCount" :0, "insertedCount" :2, "matchedCount" :0, "upsertedCount" :2, "insertedIds" :{ "0" :1, "1" :2 }, "upsertedIds" :{ "2" :3, "3" :4 }}

Dans ce cas, la collection n'existait pas réellement (je l'ai supprimée en suivant l'exemple précédent), et donc les seuls documents maintenant à l'intérieur de la collection sont ceux spécifiés dans cet exemple.

Jetons un coup d'œil à la collection.

db.pets.find() 

Résultat :

{ "_id" :1, "name" :"Bubbles", "type" :"Fish" }{ "_id" :2, "name" :"Wag", "type" :"Chien" }{ "_id" :3, "name" :"Fluffy", "type" :"Cat" }{ "_id" :4, "name" :"Bite", "type" :"Chien", "weight" :5 } 

Comme prévu, les quatre documents ont été insérés.

L'opération Upsert

Cela nous amène à notre cinquième méthode pour insérer des documents dans une collection dans MongoDB - l'opération upsert.

Il s'agit plutôt d'une méthode conditionnelle pour insérer des documents. Un upsert est une option que vous pouvez utiliser sur les opérations de mise à jour. Il insère un nouveau document uniquement si le document spécifié n'existe pas déjà. S'il existe, alors le document d'origine est mis à jour (et aucun document n'est inséré).

Nous avons déjà vu des exemples d'upserts. Dans l'exemple précédent, nous avons spécifié "upsert" : true lors de l'exécution de la updateOne et replaceOne opérations. Cela a entraîné l'insertion de deux documents, car la collection ne contenait aucun document correspondant à leurs critères de filtre.

Voici un autre exemple d'upsert. Cette fois, nous l'utiliserons sur le updateOne() méthode.

db.pets.updateOne( 
    { name: "Harry" },
    { $set: { type: "Hamster" } },
    { upsert: true }
    ) 

Résultat :

{ "acknowledged" :true, "matchedCount" :0, "modifiedCount" :0, "upsertedId" :ObjectId("5fe3dc44d991410169410524")}

Ici, nous voulions définir tous les animaux de compagnie appelés Harry comme étant un hamster. Mais il n'y avait pas d'animaux de compagnie appelés harry, donc un upsert a été effectué.

Les méthodes suivantes acceptent le upsert paramètre :

  • update()
  • updateOne()
  • updateMany()
  • findAndModify()
  • findOneAndUpdate()
  • findOneAndReplace()

Par conséquent, lorsque upsert: true est spécifié, ces méthodes effectueront une opération upsert lorsqu'elles tenteront de mettre à jour un document inexistant.