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
acknowledgedsomtrueom operationen kördes med skrivproblem ellerfalseom skrivproblem har inaktiverats. - Ett fält
insertedIdmed_idvä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
acknowledgedsomtrueom operationen kördes med skrivproblem ellerfalseom skrivproblem har inaktiverats. - En matris med
_idvä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.