MongoDB giver mange måder at indsætte dokumenter i en samling.
Her er 5 måder at indsætte dokumenter i en samling, når du bruger mongo-skallen.
insertOne()
Metode
insertOne()
metode indsætter et enkelt dokument i en samling.
Dens fulde navn er db.collection.insertOne()
, hvor collection
er navnet på den samling, dokumentet skal indsættes i.
Her er et eksempel på indsættelse af et dokument i en samling kaldet pets
:
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} )
Resultat:
{ "acknowledged" : true, "insertedId" : ObjectId("5fe2d15637b49e0faf1af214") }
db.collection.insertOne()
metode returnerer et dokument, der indeholder:
- En boolesk
acknowledged
somtrue
hvis operationen kørte med skrivebekymring ellerfalse
hvis skriveproblemer var deaktiveret. - Et felt
insertedId
med_id
værdien af det indsatte dokument.
insertMany()
Metode
insertMany()
metode ligner insertOne()
, bortset fra at den indsætter flere dokumenter i en samling.
Også på samme måde som insertOne()
, dens fulde navn er db.collection.insertMany()
, hvor collection
er navnet på den samling, dokumentet skal indsættes i. Dette gælder for alle metoder, der er angivet i denne artikel.
Her er et eksempel på brug af db.collection.insertMany()
at indsætte flere dokumenter i en samling kaldet 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()
metode returnerer et dokument, der indeholder:
- En boolesk
acknowledged
somtrue
hvis operationen kørte med skrivebekymring ellerfalse
hvis skriveproblemer var deaktiveret. - En matrix af
_id
værdier for hvert vellykket indsat dokument.
insert()
Metode
insert()
metode er som en kombination af insertOne()
og insertMany()
. Det giver dig mulighed for at indsætte enten et enkelt dokument eller flere dokumenter i en samling.
Her er et eksempel på brug af db.collection.insert()
for at indsætte et enkelt dokument:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
)
Resultat:
WriteResult({ "nInserted" : 1 })
Når et enkelt dokument indsættes, db.collection.insert()
returnerer et WriteResult
objekt. Når et array af dokumenter indsættes, returnerer det et BulkWriteResult
objekt.
Her er et eksempel på brug af db.collection.insert()
for at indsætte flere dokumenter.
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ævnt er et BulkWriteResult
objekt returneres, når der indsættes en række dokumenter.
bulkWrite()
Metode
bulkWrite()
metode giver dig mulighed for at udføre bulk-skrivehandlinger.
Faktisk insertMany()
udfører allerede masseindsættelsesoperationer. Det samme med insert()
når du indsætter en række dokumenter. Men bulkWrite()
giver dig mulighed for at udføre masseindsættelse, opdatering og fjernelse, alt sammen fra et enkelt metodekald.
Eksempel:
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 dette tilfælde eksisterede samlingen faktisk ikke (jeg droppede den efter det forrige eksempel), og derfor er de eneste dokumenter nu i samlingen dem, der er angivet i dette eksempel.
Lad os tage et kig 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 forventet blev alle fire dokumenter indsat.
The Upsert Operation
Dette bringer os til vores femte metode til at indsætte dokumenter i en samling i MongoDB – upsert-operationen.
Dette er mere en betinget metode til at indsætte dokumenter. En upsert er en mulighed, som du kan bruge til opdateringshandlinger. Den indsætter kun et nyt dokument, hvis det angivne dokument ikke allerede eksisterer. Hvis det eksisterer, opdateres det originale dokument (og der er ikke indsat noget dokument).
Vi har allerede set eksempler på upserts. I det forrige eksempel specificerede vi "upsert" : true
når du udfører updateOne
og replaceOne
operationer. Det resulterede i, at to dokumenter blev indsat, fordi samlingen ikke indeholdt dokumenter, der matchede deres filterkriterier.
Her er endnu et eksempel på en upsert. Denne gang bruger vi det på updateOne()
metode.
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
)
Resultat:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe3dc44d991410169410524") }
Her ville vi indstille alle kæledyr kaldet Harry til at være en hamster. Men der var ingen kæledyr, der hed Harry, så en upsert blev udført.
Følgende metoder accepterer upsert
parameter:
update()
updateOne()
updateMany()
findAndModify()
findOneAndUpdate()
findOneAndReplace()
Derfor, når upsert: true
er angivet, vil disse metoder udføre en upsert-handling, når de forsøger at opdatere et ikke-eksisterende dokument.