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
commetrue
si l'opération s'est exécutée avec un souci d'écriture oufalse
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
commetrue
si l'opération s'est exécutée avec un souci d'écriture oufalse
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 laupdateOne
etreplaceOne
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.