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
acknowledged
jakotrue
pokud operace proběhla s obavami o zápis nebofalse
pokud bylo zakázáno psaní. - Pole
insertedId
s_id
hodnotu 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
acknowledged
jakotrue
pokud operace proběhla s obavami o zápis nebofalse
pokud bylo zakázáno psaní. - Pole
_id
hodnoty 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.