I MongoDB är db.collection.insert() metoden infogar ett eller flera dokument i en samling.
collection del är namnet på samlingen som dokumentet/dokumenten ska infogas i.
Exempel
Här är ett exempel på hur du använder db.collection.insert() för att infoga flera dokument i en samling som heter pets :
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" : [ ]
})
db.collection.insert() metod returnerar ett objekt som innehåller statusen för infogningsoperationen.
Objektet som returneras beror på om ett enda dokument har infogats eller flera dokument.
- När ett enskilt dokument infogas returnerar det ett
WriteResultobjekt. - När en matris med dokument infogas returnerar den ett
BulkWriteResultobjekt.
Vi kan se att exemplet ovan returnerade ett BulkWriteResult objekt. Detta beror på att vi har lagt till en mängd dokument. Det skulle ha gjort detta även om arrayen bara innehöll ett element.
Om vi nu använder db.collection.find() för att titta på samlingen kommer vi att se de nyligen tillagda dokumenten.
db.pets.find() Resultat:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } I det här fallet är våra tre dokument de enda i samlingen, och därför returnerades endast dessa dokument.
Men om samlingen var stor kunde vi använda dokument-ID:n för att begränsa resultatet till bara de dokument som vi är intresserade av.
db.pets.find({_id: {$in: [1,2,3]}}) Resultat:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } Vad händer om samlingen inte finns?
Om samlingen inte finns skapas den och dokumenten läggs till i den.
Om samlingen redan finns, läggs dokumenten helt enkelt till i den (förutsatt deras _id värden kommer inte i konflikt med några befintliga).
När jag skapade det här exemplet fanns inte samlingen, så infogningen skapade den.
_id Fält
_id field är ett unikt identifierarfält i MongoDB.
Som visades i föregående exempel kan du ange ditt eget _id fältet i dokumentet. Om du gör det måste dess värde vara unikt i samlingen. Detta beror på att ditt _id fältet kommer att användas som den unika identifieraren för dokumentet.
Här är ett exempel på hur du infogar ett dokument utan att ange _id fält.
db.pets.insert(
{ name: "Bruce", type: "Bat" }
) Resultat:
WriteResult({ "nInserted" : 1 })
Observera att i det här fallet returnerar metoden ett WriteResult objekt istället för ett BulkWriteResult objekt. Detta beror på att vi infogade ett enda dokument (och det var inte i en array).
Låt oss nu titta på samlingen igen.
db.pets.find() Resultat:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : ObjectId("5fe323d837b49e0faf1af218"), "name" : "Bruce", "type" : "Bat" }
Vi kan se att vårt nya dokument ingår i samlingen och det har en _id fält med ett automatiskt genererat värde.
Den ordered Parameter
db.collection.insert() metoden accepterar också en ordered parameter. Detta är en boolesk parameter med standardvärdet true .
Den ordered parametern anger om infogningsoperationen ska beställas eller oordnad.
Om ordered är inställd på false , dokument infogas i ett oordnat format och kan ordnas om av mongod för att öka prestandan.
Med beställda bilagor, om ett fel inträffar under en infogning av ett av dokumenten, returnerar MongoDB fel utan att bearbeta de återstående dokumenten i arrayen.
Med oordnade bilagor, om ett fel inträffar under en infogning av ett av dokumenten, fortsätter MongoDB att infoga de återstående dokumenten i arrayen.
Mer information
db.collection.insert() metoden accepterar också en writeConcern argument, som beskriver nivån på bekräftelse som begärs från MongoDB för skrivoperationer.
Se MongoDB-dokumentationen för db.collection.insert() för mer information.