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, когато се опитат да актуализират несъществуващ документ.