sql >> Databáze >  >> NoSQL >> MongoDB

5 způsobů, jak vložit dokumenty do MongoDB

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 jako true pokud operace proběhla s obavami o zápis nebo false 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 jako true pokud operace proběhla s obavami o zápis nebo false 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.


  1. Co je to MapReduce Key Value Pair v Hadoop?

  2. Mongodb Připojte se na pole _id z String do ObjectId

  3. Co bych měl používat? Pokoje Socket.io nebo Redis pub-sub?

  4. Mongodb PHP - celá čísla s desetinnými místy