MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

5 sposobów na wstawianie dokumentów do MongoDB

MongoDB zapewnia wiele sposobów wstawiania dokumentów do kolekcji.

Oto 5 sposobów na wstawianie dokumentów do kolekcji podczas korzystania z powłoki mongo.

insertOne() Metoda

insertOne() metoda wstawia pojedynczy dokument do kolekcji.

Jego pełna nazwa to db.collection.insertOne() , gdzie collection to nazwa kolekcji, do której ma zostać wstawiony dokument.

Oto przykład wstawiania dokumentu do kolekcji o nazwie pets :

db.pets.insertOne( { 
    name: "Scratch", 
    type: "Cat" 
    } )

Wynik:

{
	"acknowledged" : true,
	"insertedId" : ObjectId("5fe2d15637b49e0faf1af214")
}

db.collection.insertOne() metoda zwraca dokument zawierający:

  • Boole'owskie acknowledged jako true jeśli operacja została wykonana z problemem zapisu lub false jeśli problem zapisu był wyłączony.
  • Pole insertedId z _id wartość wstawionego dokumentu.

insertMany() Metoda

insertMany() metoda jest podobna do metody insertOne() , z wyjątkiem tego, że wstawia wiele dokumentów do kolekcji.

Również w podobny sposób do insertOne() , jego pełna nazwa to db.collection.insertMany() , gdzie collection to nazwa kolekcji, do której ma zostać wstawiony dokument. Dotyczy to wszystkich metod wymienionych w tym artykule.

Oto przykład użycia db.collection.insertMany() aby wstawić wiele dokumentów do kolekcji o nazwie pets :

db.pets.insertMany([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ])

Wynik:

{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] } 

db.collection.insertMany() metoda zwraca dokument zawierający:

  • Boole'owskie acknowledged jako true jeśli operacja została wykonana z problemem zapisu lub false jeśli problem zapisu był wyłączony.
  • Tablica _id wartości dla każdego pomyślnie wstawionego dokumentu.

insert() Metoda

insert() metoda jest jak kombinacja insertOne() i insertMany() . Umożliwia wstawienie pojedynczego dokumentu lub wielu dokumentów do kolekcji.

Oto przykład użycia db.collection.insert() aby wstawić pojedynczy dokument:

db.pets.insert(
    { name: "Bruce", type: "Bat" }
    )

Wynik:

WriteResult({ "nInserted" : 1 })

Po wstawieniu pojedynczego dokumentu db.collection.insert() zwraca WriteResult obiekt. Po wstawieniu tablicy dokumentów zwraca BulkWriteResult obiekt.

Oto przykład użycia db.collection.insert() aby wstawić wiele dokumentów.

db.pets.insert([
    { _id: 1, name: "Wag", type: "Dog" },
    { _id: 2, name: "Bark", type: "Dog" },
    { _id: 3, name: "Meow", type: "Cat" }
    ])

Wynik:

BulkWriteResult({
	"writeErrors" : [ ],
	"writeConcernErrors" : [ ],
	"nInserted" : 3,
	"nUpserted" : 0,
	"nMatched" : 0,
	"nModified" : 0,
	"nRemoved" : 0,
	"upserted" : [ ]
})

Jak wspomniano, BulkWriteResult obiekt jest zwracany podczas wstawiania tablicy dokumentów.

bulkWrite() Metoda

bulkWrite() Metoda umożliwia wykonywanie operacji zapisu zbiorczego.

Właściwie insertMany() już wykonuje operacje wstawiania zbiorczego. To samo z insert() podczas wstawiania tablicy dokumentów. Ale bulkWrite() umożliwia wykonywanie zbiorczych operacji wstawiania, aktualizowania i usuwania, wszystko za pomocą jednego wywołania metody.

Przykład:

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
    } }
])

Wynik:

{
	"acknowledged" : true,
	"deletedCount" : 0,
	"insertedCount" : 2,
	"matchedCount" : 0,
	"upsertedCount" : 2,
	"insertedIds" : {
		"0" : 1,
		"1" : 2
	},
	"upsertedIds" : {
		"2" : 3,
		"3" : 4
	}
}

W tym przypadku kolekcja w rzeczywistości nie istniała (upuściłem ją zgodnie z poprzednim przykładem), więc jedynymi dokumentami znajdującymi się teraz w kolekcji są te określone w tym przykładzie.

Przyjrzyjmy się kolekcji.

db.pets.find()

Wynik:

{ "_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 }

Zgodnie z oczekiwaniami wszystkie cztery dokumenty zostały wstawione.

Operacja Upsert

To prowadzi nas do naszej piątej metody wstawiania dokumentów do kolekcji w MongoDB – operacji upsert.

Jest to bardziej warunkowa metoda wstawiania dokumentów. Upsert to opcja, której można używać podczas operacji aktualizacji. Wstawia nowy dokument tylko wtedy, gdy określony dokument jeszcze nie istnieje. Jeśli istnieje, oryginalny dokument jest aktualizowany (i żaden dokument nie jest wstawiany).

Widzieliśmy już przykłady upsert. W poprzednim przykładzie określiliśmy "upsert" : true podczas wykonywania updateOne i replaceOne operacje. Spowodowało to wstawienie dwóch dokumentów, ponieważ kolekcja nie zawierała żadnych dokumentów spełniających kryteria filtrowania.

Oto kolejny przykład upsert. Tym razem użyjemy go w updateOne() metoda.

db.pets.updateOne( 
    { name: "Harry" },
    { $set: { type: "Hamster" } },
    { upsert: true }
    )

Wynik:

{
	"acknowledged" : true,
	"matchedCount" : 0,
	"modifiedCount" : 0,
	"upsertedId" : ObjectId("5fe3dc44d991410169410524")
}

Tutaj chcieliśmy, aby wszystkie zwierzaki o imieniu Harry były chomikami. Ale nie było żadnych zwierzątek o imieniu Harry, więc zrobiono zdenerwowanie.

Następujące metody akceptują upsert parametr:

  • update()
  • updateOne()
  • updateMany()
  • findAndModify()
  • findOneAndUpdate()
  • findOneAndReplace()

Dlatego, gdy upsert: true jest określony, metody te wykonają operację upsert podczas próby aktualizacji nieistniejącego dokumentu.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $podłoga

  2. Podzbiór tablicy w potoku struktury agregacji

  3. Atrybut Mongoengine creation_time w dokumencie

  4. Posortować za pomocą MongoEngine?

  5. Pomnóż pole przez wartość w Mongodb