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
WriteResult
objekt. - När en matris med dokument infogas returnerar den ett
BulkWriteResult
objekt.
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.