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

4 sposoby na aktualizację dokumentu w MongoDB

MongoDB udostępnia różne sposoby aktualizowania dokumentu. Metoda, której użyjesz, będzie zależeć od tego, jak chcesz przeprowadzić aktualizację.

W tym artykule przedstawiono 4 sposoby aktualizacji dokumentu w MongoDB.

db.collection.updateOne() Metoda

db.collection.updateOne() metoda robi dokładnie to, co obiecuje jej nazwa – aktualizuje jeden dokument.

Załóżmy, że mamy kolekcję o nazwie pets który zawiera następujące dokumenty:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Moglibyśmy zaktualizować jeden dokument w ten sposób:

db.pets.updateOne( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Wynik:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

To zaktualizowało tylko jeden dokument, mimo że dwa dokumenty spełniają kryteria filtrowania (kryteria to type: "Dog" ).

Wyniki możemy sprawdzić w następujący sposób:

db.pets.find()

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Pierwszy dokument ma teraz type Cow zamiast Dog , ale nie miało to wpływu na drugi dokument, mimo że również spełniał kryteria filtrowania.

db.collection.updateMany() Metoda

db.collection.updateMany() metoda aktualizuje wszystkie dokumenty, które pasują do określonego filtra dla kolekcji.

Skorzystajmy z oryginalnych dokumentów inkasowych:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Po raz kolejny widzimy, że dwa dokumenty mają Dog jako ich type .

Możemy zaktualizować oba dokumenty jednocześnie w ten sposób:

db.pets.updateMany( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Wynik:

{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

To pokazuje nam, że dwa dokumenty pasowały, a dwa zostały zaktualizowane.

Możemy sprawdzić kolekcję:

db.pets.find()

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

db.collection.update() Metoda

db.collection.update() metoda może aktualizować pojedynczy dokument lub wiele dokumentów w kolekcji.

Domyślnie aktualizuje tylko jeden dokument. Ale jeśli multi: true jest określony, a następnie aktualizuje wszystkie dokumenty, które spełniają kryteria zapytania.

Zaktualizuj pojedynczy dokument

Użyjmy ponownie oryginalnej kolekcji dokumentów:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Moglibyśmy zaktualizować jeden dokument w ten sposób:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Wynik:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Zaktualizowano tylko jeden dokument. Potwierdzamy to, gdy wysyłamy zapytanie do kolekcji.

db.pets.find()

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Aktualizuj wiele dokumentów

Wróćmy jeszcze raz do oryginalnej kolekcji dokumentów:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

A teraz dodamy multi: true do naszej operacji aktualizacji, aby zaktualizować wszystkie dokumenty, które spełniają kryteria zapytania:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } },
    { multi: true }
    )

Wynik:

WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) 

Więc tym razem dwa dokumenty zostały dopasowane i zaktualizowane.

Przyjrzyjmy się jeszcze raz naszej kolekcji:

db.pets.find()

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Zgodnie z oczekiwaniami oba dokumenty mają teraz type Cow .

db.collection.replaceOne() Metoda

db.collection.replaceOne() metoda zastępuje pojedynczy dokument w kolekcji w oparciu o filtr.

Ponownie używając oryginalnej kolekcji:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Zobaczmy, co się stanie, gdy użyjemy db.collection.replaceOne() metoda przeciwko niemu.

db.pets.replaceOne( 
    { type: "Dog" },
    { type: "Cow" }
    )

Wynik:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Zaktualizowano jeden dokument.

Rzućmy okiem.

db.pets.find()

Wynik:

{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Tym razem cały dokument został zastąpiony nowym dokumentem (z wyjątkiem _id pole).

Ta metoda zastępuje cały dokument (z wyjątkiem _id pole).

Do góry

Wszystkie powyższe metody akceptują upsert argument, który umożliwia wykonanie operacji upsert.

Kiedy upsert: true , dokument jest aktualizowany, jeśli istnieje zgodność z kryteriami zapytania, ale jeśli nie ma żadnego dopasowania, wstawiany jest nowy dokument.

Przykład:

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

Wynik:

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

W tym przypadku nie było dopasowań, więc dokument został przesunięty.

Sprawdźmy kolekcję.

db.pets.find()

Wynik:

{ "_id" : 1, "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Usuń obiekt z tablicy zagnieżdżonej za pomocą $pull i $[identyfikator] (mongoDB 3.6)

  2. Grupa sterowników MongoDB .NET według zakresu czasu

  3. Konwertowanie BSON Type ObjectId na JSON (przechowywanie w Mongodb) — Java

  4. Jak wysłać zapytanie do MongoDB, aby sprawdzić, czy element istnieje?

  5. Zapytanie MongoDB za pomocą wyrażenia regex względem ObjectId