MongoDB erbjuder många sätt att infoga dokument i en samling.
Här är 5 sätt att infoga dokument i en samling när du använder mongoskalet.
insertOne()
Metod
insertOne()
metoden infogar ett enda dokument i en samling.
Dess fullständiga namn är db.collection.insertOne()
, där collection
är namnet på samlingen att infoga dokumentet i.
Här är ett exempel på hur du infogar ett dokument i en samling som heter pets
:
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} )
Resultat:
{ "acknowledged" : true, "insertedId" : ObjectId("5fe2d15637b49e0faf1af214") }
db.collection.insertOne()
metod returnerar ett dokument som innehåller:
- En boolesk
acknowledged
somtrue
om operationen kördes med skrivproblem ellerfalse
om skrivproblem har inaktiverats. - Ett fält
insertedId
med_id
värdet på det infogade dokumentet.
insertMany()
Metod
insertMany()
metod liknar insertOne()
, förutom att det infogar flera dokument i en samling.
Också på liknande sätt som insertOne()
, dess fullständiga namn är db.collection.insertMany()
, där collection
är namnet på samlingen som dokumentet ska infogas i. Detta gäller alla metoder som anges i den här artikeln.
Här är ett exempel på hur du använder db.collection.insertMany()
för att infoga flera dokument i en samling som heter pets
:
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Resultat:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
db.collection.insertMany()
metod returnerar ett dokument som innehåller:
- En boolesk
acknowledged
somtrue
om operationen kördes med skrivproblem ellerfalse
om skrivproblem har inaktiverats. - En matris med
_id
värden för varje framgångsrikt infogat dokument.
insert()
Metod
insert()
Metoden är som en kombination av insertOne()
och insertMany()
. Det gör att du kan infoga antingen ett enda dokument eller flera dokument i en samling.
Här är ett exempel på hur du använder db.collection.insert()
för att infoga ett enda dokument:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
)
Resultat:
WriteResult({ "nInserted" : 1 })
När ett enskilt dokument infogas, db.collection.insert()
returnerar ett WriteResult
objekt. När en matris med dokument infogas returnerar den ett BulkWriteResult
objekt.
Här är ett exempel på hur du använder db.collection.insert()
för att infoga flera dokument.
db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Resultat:
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
Som nämnts, ett BulkWriteResult
objektet returneras när en uppsättning dokument infogas.
bulkWrite()
Metod
bulkWrite()
metoden gör att du kan utföra massskrivoperationer.
Faktiskt, insertMany()
utför redan massinsättningsoperationer. Samma med insert()
när du infogar en mängd dokument. Men bulkWrite()
gör det möjligt för dig att utföra massinsättning, uppdatering och borttagning, allt från ett enda metodanrop.
Exempel:
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
} }
])
Resultat:
{ "acknowledged" : true, "deletedCount" : 0, "insertedCount" : 2, "matchedCount" : 0, "upsertedCount" : 2, "insertedIds" : { "0" : 1, "1" : 2 }, "upsertedIds" : { "2" : 3, "3" : 4 } }
I det här fallet existerade inte samlingen faktiskt (jag tappade den efter föregående exempel), så de enda dokument som nu finns i samlingen är de som anges i det här exemplet.
Låt oss ta en titt på samlingen.
db.pets.find()
Resultat:
{ "_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 }
Som väntat infogades alla fyra dokument.
The Upsert Operation
Detta för oss till vår femte metod för att infoga dokument i en samling i MongoDB – upsert-operationen.
Detta är mer en villkorad metod för att infoga dokument. En upsert är ett alternativ som du kan använda vid uppdateringsoperationer. Den infogar bara ett nytt dokument om det angivna dokumentet inte redan finns. Om det finns uppdateras originaldokumentet (och inget dokument infogas).
Vi har redan sett exempel på uppror. I föregående exempel angav vi "upsert" : true
när du utför updateOne
och replaceOne
operationer. Det resulterade i att två dokument infogades, eftersom samlingen inte innehöll några dokument som matchade deras filterkriterier.
Här är ett annat exempel på en upsert. Den här gången kommer vi att använda den på updateOne()
metod.
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
)
Resultat:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe3dc44d991410169410524") }
Här ville vi ställa in alla husdjur som heter Harry att vara en hamster. Men det fanns inga husdjur som hette Harry, så en upsert gjordes.
Följande metoder accepterar upsert
parameter:
update()
updateOne()
updateMany()
findAndModify()
findOneAndUpdate()
findOneAndReplace()
Därför, när upsert: true
är specificerad kommer dessa metoder att utföra en upsert-operation när de försöker uppdatera ett icke-existerande dokument.