MongoDB предоставя много начини за вмъкване на документи в колекция.
Ето 5 начина за вмъкване на документи в колекция, когато използвате mongo shell.
insertOne() Метод
insertOne() метод вмъква един документ в колекция.
Пълното му име е db.collection.insertOne() , където collection е името на колекцията, в която да вмъкнете документа.
Ето пример за вмъкване на документ в колекция, наречена pets :
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} ) Резултат:
{
"acknowledged" : true,
"insertedId" : ObjectId("5fe2d15637b49e0faf1af214")
}
db.collection.insertOne() метод връща документ, съдържащ:
- Булева
acknowledgedкатоtrueако операцията се изпълняваше със загриженост за запис илиfalseако загрижеността за запис е деактивирана. - Поле
insertedIdс_idстойност на вмъкнатия документ.
insertMany() Метод
insertMany() методът е подобен на insertOne() , с изключение на това, че вмъква множество документи в колекция.
Също така по подобен начин на insertOne() , пълното му име е db.collection.insertMany() , където collection е името на колекцията, в която да вмъкнете документа. Това се отнася за всички методи, изброени в тази статия.
Ето пример за използване на db.collection.insertMany() за да вмъкнете множество документи в колекция, наречена pets :
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
]) Резултат:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
db.collection.insertMany() метод връща документ, съдържащ:
- Булева
acknowledgedкатоtrueако операцията се изпълняваше със загриженост за запис илиfalseако загрижеността за запис е деактивирана. - Масив от
_idстойности за всеки успешно вмъкнат документ.
insert() Метод
insert() методът е като комбинация от insertOne() и insertMany() . Позволява ви да вмъкнете или един документ, или няколко документа в колекция.
Ето пример за използване на db.collection.insert() за да вмъкнете един документ:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
) Резултат:
WriteResult({ "nInserted" : 1 })
Когато се вмъкне един документ, db.collection.insert() връща WriteResult обект. Когато се вмъкне масив от документи, той връща BulkWriteResult обект.
Ето пример за използване на db.collection.insert() за да вмъкнете няколко документа.
db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
]) Резултат:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Както споменахме, BulkWriteResult обектът се връща при вмъкване на масив от документи.
bulkWrite() Метод
bulkWrite() методът ви позволява да извършвате групови операции за запис.
Всъщност, insertMany() вече изпълнява операции за групово вмъкване. Същото с insert() при вмъкване на масив от документи. Но bulkWrite() ви позволява да извършвате групови операции за вмъкване, актуализиране и премахване, всичко това от едно извикване на метод.
Пример:
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
} }
]) Резултат:
{
"acknowledged" : true,
"deletedCount" : 0,
"insertedCount" : 2,
"matchedCount" : 0,
"upsertedCount" : 2,
"insertedIds" : {
"0" : 1,
"1" : 2
},
"upsertedIds" : {
"2" : 3,
"3" : 4
}
} В този случай колекцията всъщност не е съществувала (изпуснах я след предишния пример) и така единствените документи, които сега са в колекцията, са посочените в този пример.
Нека да разгледаме колекцията.
db.pets.find() Резултат:
{ "_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 } Както се очакваше, и четирите документа бяха поставени.
Операция Upsert
Това ни води до нашия пети метод за вмъкване на документи в колекция в MongoDB – операцията upsert.
Това е по-скоро условен метод за вмъкване на документи. Upsert е опция, която можете да използвате при операции за актуализиране. Той вмъква нов документ само ако посоченият документ все още не съществува. Ако съществува, оригиналният документ се актуализира (и не е вмъкнат документ).
Вече сме виждали примери за разстройства. В предишния пример посочихме "upsert" : true когато изпълнявате updateOne и replaceOne операции. Това доведе до вмъкване на два документа, тъй като колекцията не съдържа документи, които да отговарят на техните критерии за филтриране.
Ето още един пример за разстройство. Този път ще го използваме в updateOne() метод.
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
) Резултат:
{
"acknowledged" : true,
"matchedCount" : 0,
"modifiedCount" : 0,
"upsertedId" : ObjectId("5fe3dc44d991410169410524")
} Тук искахме да настроим всички домашни любимци, наречени Хари, да бъдат хамстери. Но нямаше домашни любимци, наречени Хари, така че беше извършено разтърсване.
Следните методи приемат upsert параметър:
update()updateOne()updateMany()findAndModify()findOneAndUpdate()findOneAndReplace()
Следователно, когато upsert: true е посочено, тези методи ще изпълнят операция upsert, когато се опитат да актуализират несъществуващ документ.