MongoDB poskytuje mnoho způsobů, jak vkládat dokumenty do kolekce.
Zde je 5 způsobů, jak vložit dokumenty do kolekce při použití mongo shellu.
insertOne() Metoda
insertOne() metoda vloží jeden dokument do kolekce.
Jeho úplný název je db.collection.insertOne() , kde collection je název kolekce, do které se má dokument vložit.
Zde je příklad vložení dokumentu do kolekce s názvem pets :
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} ) Výsledek:
{
"acknowledged" : true,
"insertedId" : ObjectId("5fe2d15637b49e0faf1af214")
}
db.collection.insertOne() metoda vrací dokument obsahující:
- Logická hodnota
acknowledgedjakotruepokud operace proběhla s obavami o zápis nebofalsepokud bylo zakázáno psaní. - Pole
insertedIds_idhodnotu vloženého dokumentu.
Položka insertMany() Metoda
insertMany() metoda je podobná insertOne() , kromě toho, že vkládá více dokumentů do kolekce.
Také podobným způsobem jako insertOne() , jeho celý název je db.collection.insertMany() , kde collection je název kolekce, do které se má dokument vložit. To platí pro všechny metody uvedené v tomto článku.
Zde je příklad použití db.collection.insertMany() pro vložení více dokumentů do kolekce nazvané pets :
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
]) Výsledek:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
db.collection.insertMany() metoda vrací dokument obsahující:
- Logická hodnota
acknowledgedjakotruepokud operace proběhla s obavami o zápis nebofalsepokud bylo zakázáno psaní. - Pole
_idhodnoty pro každý úspěšně vložený dokument.
Položka insert() Metoda
insert() metoda je jako kombinace insertOne() a insertMany() . Umožňuje vložit buď jeden dokument, nebo více dokumentů do kolekce.
Zde je příklad použití db.collection.insert() pro vložení jednoho dokumentu:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
) Výsledek:
WriteResult({ "nInserted" : 1 })
Když je vložen jeden dokument, db.collection.insert() vrátí WriteResult objekt. Po vložení pole dokumentů vrátí BulkWriteResult objekt.
Zde je příklad použití db.collection.insert() vložit více dokumentů.
db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
]) Výsledek:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Jak již bylo zmíněno, BulkWriteResult objekt je vrácen při vkládání pole dokumentů.
bulkWrite() Metoda
bulkWrite() umožňuje provádět operace hromadného zápisu.
Vlastně insertMany() již provádí operace hromadného vkládání. Totéž s insert() při vkládání řady dokumentů. Ale bulkWrite() umožňuje provádět operace hromadného vkládání, aktualizace a odstraňování, to vše z jediného volání metody.
Příklad:
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
} }
]) Výsledek:
{
"acknowledged" : true,
"deletedCount" : 0,
"insertedCount" : 2,
"matchedCount" : 0,
"upsertedCount" : 2,
"insertedIds" : {
"0" : 1,
"1" : 2
},
"upsertedIds" : {
"2" : 3,
"3" : 4
}
} V tomto případě sbírka ve skutečnosti neexistovala (podle předchozího příkladu jsem ji zahodil), a tak jediné dokumenty, které jsou nyní v kolekci, jsou ty, které jsou uvedeny v tomto příkladu.
Pojďme se podívat na sbírku.
db.pets.find() Výsledek:
{ "_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 } Podle očekávání byly vloženy všechny čtyři dokumenty.
Operace Upsert
Tím se dostáváme k naší páté metodě vkládání dokumentů do kolekce v MongoDB – operaci upsert.
Jedná se spíše o podmíněný způsob vkládání dokumentů. Upsert je možnost, kterou můžete použít při operacích aktualizace. Vloží nový dokument pouze v případě, že zadaný dokument již neexistuje. Pokud existuje, pak se původní dokument aktualizuje (a žádný dokument se nevloží).
Už jsme viděli příklady upsertů. V předchozím příkladu jsme zadali "upsert" : true při provádění updateOne a replaceOne operace. To vedlo k vložení dvou dokumentů, protože kolekce neobsahovala žádné dokumenty, které by odpovídaly kritériím filtru.
Zde je další příklad upsert. Tentokrát jej použijeme na updateOne() metoda.
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
) Výsledek:
{
"acknowledged" : true,
"matchedCount" : 0,
"modifiedCount" : 0,
"upsertedId" : ObjectId("5fe3dc44d991410169410524")
} Zde jsme chtěli nastavit všechny mazlíčky jménem Harry jako křečka. Ale nebyli tam žádní mazlíčci zvaní harry, takže byl proveden upsert.
Následující metody přijímají upsert parametr:
update()updateOne()updateMany()findAndModify()findOneAndUpdate()findOneAndReplace()
Proto, když upsert: true je zadáno, tyto metody provedou operaci upsert, když se pokusí aktualizovat neexistující dokument.