MongoDB biedt vele manieren om documenten in een verzameling in te voegen.
Hier zijn 5 manieren om documenten in een verzameling in te voegen bij gebruik van de mongo-shell.
De insertOne()
Methode
De insertOne()
methode voegt een enkel document in een verzameling in.
De volledige naam is db.collection.insertOne()
, waar collection
is de naam van de verzameling waarin het document moet worden ingevoegd.
Hier is een voorbeeld van het invoegen van een document in een verzameling met de naam pets
:
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} )
Resultaat:
{ "acknowledged" : true, "insertedId" : ObjectId("5fe2d15637b49e0faf1af214") }
De db.collection.insertOne()
methode retourneert een document met daarin:
- Een boolean
acknowledged
alstrue
als de bewerking werd uitgevoerd met schrijfproblemen offalse
als schrijfzorg was uitgeschakeld. - Een veld
insertedId
met de_id
waarde van het ingevoegde document.
De insertMany()
Methode
De insertMany()
methode is vergelijkbaar met insertOne()
, behalve dat het meerdere documenten in een verzameling invoegt.
Ook op een vergelijkbare manier als insertOne()
, de volledige naam is db.collection.insertMany()
, waar collection
is de naam van de verzameling waarin het document moet worden ingevoegd. Dit geldt voor alle methoden die in dit artikel worden genoemd.
Hier is een voorbeeld van het gebruik van db.collection.insertMany()
om meerdere documenten in te voegen in een verzameling genaamd pets
:
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Resultaat:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
De db.collection.insertMany()
methode retourneert een document met daarin:
- Een boolean
acknowledged
alstrue
als de bewerking werd uitgevoerd met schrijfproblemen offalse
als schrijfzorg was uitgeschakeld. - Een array van
_id
waarden voor elk succesvol ingevoegd document.
De insert()
Methode
De insert()
methode is als een combinatie van insertOne()
en insertMany()
. Hiermee kunt u een enkel document of meerdere documenten in een verzameling invoegen.
Hier is een voorbeeld van het gebruik van db.collection.insert()
om een enkel document in te voegen:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
)
Resultaat:
WriteResult({ "nInserted" : 1 })
Wanneer een enkel document wordt ingevoegd, db.collection.insert()
retourneert een WriteResult
voorwerp. Wanneer een array van documenten wordt ingevoegd, retourneert het een BulkWriteResult
voorwerp.
Hier is een voorbeeld van het gebruik van db.collection.insert()
om meerdere documenten in te voegen.
db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Resultaat:
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
Zoals gezegd, een BulkWriteResult
object wordt geretourneerd bij het invoegen van een array met documenten.
De bulkWrite()
Methode
De bulkWrite()
methode stelt u in staat om bulkschrijfbewerkingen uit te voeren.
Eigenlijk insertMany()
voert al bulkinvoegbewerkingen uit. Hetzelfde met insert()
bij het invoegen van een reeks documenten. Maar bulkWrite()
stelt u in staat om bulkbewerkingen uit te voeren, bij te werken en te verwijderen, allemaal vanuit een enkele methodeaanroep.
Voorbeeld:
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
} }
])
Resultaat:
{ "acknowledged" : true, "deletedCount" : 0, "insertedCount" : 2, "matchedCount" : 0, "upsertedCount" : 2, "insertedIds" : { "0" : 1, "1" : 2 }, "upsertedIds" : { "2" : 3, "3" : 4 } }
In dit geval bestond de verzameling niet echt (ik liet deze vallen volgens het vorige voorbeeld), en dus zijn de enige documenten die zich nu in de verzameling bevinden, de documenten die in dit voorbeeld worden gespecificeerd.
Laten we de collectie eens bekijken.
db.pets.find()
Resultaat:
{ "_id" : 1, "name" : "Bubbles", "type" : "Fish" } { "_id" : 2, "name" : "Wag", "type" : "Dog" } { "_id" : 3, "name" : "Fluffy", "type" : "Cat" } { "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 }
Zoals verwacht werden alle vier de documenten ingevoegd.
De Upsert-operatie
Dit brengt ons bij onze vijfde methode voor het invoegen van documenten in een verzameling in MongoDB - de upsert-bewerking.
Dit is meer een voorwaardelijke methode voor het invoegen van documenten. Een upsert is een optie die u kunt gebruiken bij updatebewerkingen. Het voegt alleen een nieuw document in als het opgegeven document nog niet bestaat. Als het bestaat, wordt het originele document bijgewerkt (en wordt er geen document ingevoegd).
We hebben al voorbeelden gezien van upserts. In het vorige voorbeeld specificeerden we "upsert" : true
bij het uitvoeren van de updateOne
en replaceOne
activiteiten. Dat resulteerde in het invoegen van twee documenten, omdat de collectie geen documenten bevatte die aan hun filtercriteria voldeden.
Hier is nog een voorbeeld van een upsert. Deze keer gebruiken we het op de updateOne()
methode.
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
)
Resultaat:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe3dc44d991410169410524") }
Hier wilden we alle huisdieren met de naam Harry instellen als een hamster. Maar er waren geen huisdieren die Harry heette, dus er werd een upsert uitgevoerd.
De volgende methoden accepteren de upsert
parameter:
update()
updateOne()
updateMany()
findAndModify()
findOneAndUpdate()
findOneAndReplace()
Daarom, wanneer upsert: true
is opgegeven, zullen deze methoden een upsert-bewerking uitvoeren wanneer ze proberen een niet-bestaand document bij te werken.