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

Aktualizacja MongoDBWiele z Warunkami

Naprawdę chcesz bulkWrite() używając dwóch "updateMany" zamiast tego wypowiedzi w nim zawarte. Wyrażenia agregacji nie mogą być używane do „wyboru alternatywnego” w żadnej formie instrukcji aktualizacji.

db.country.bulkWrite([
  { "updateMany": {
    "filter": { "pop": { "$lt": 20000000 } },
    "update": { "$set": { "country": "Small Country" } }
  }},
  { "updateMany": {
    "filter": { "pop": { "$gt": 20000000 } },
    "update": { "$set": { "country": "Large Country" } } 
  }}
])

Wciąż istnieje oczekująca „prośba o funkcję” na SERVER-6566 dla „składni warunkowej”, ale to nie zostało jeszcze rozwiązane. „Zbiorczy” interfejs API został faktycznie wprowadzony po zgłoszeniu tego żądania i naprawdę można go dostosować jak pokazano, aby zrobić mniej więcej to samo.

Również przy użyciu $out w instrukcji agregacji, jak sugerowano inaczej, nie jest opcją „aktualizacji” i obecnie może pisać tylko do „nowej kolekcji”. Planowana zmiana z MongoDB 4.2 i nowszych pozwoliłaby $out faktycznie „aktualizować” istniejąca kolekcja, jednak byłoby to tylko wtedy, gdy kolekcja, która ma zostać zaktualizowana, różni się od jakiejkolwiek innej kolekcji używanej w ramach gromadzenia danych z potoku agregacji. Więc nie jest to możliwe użyć potoku agregacji do aktualizacji tego samego kolekcja jako to, z czego czytasz.

W skrócie, użyj bulkWrite() .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy są jakieś narzędzia do migracji schematów baz danych NoSQL?

  2. Sprawdź, czy wystąpił błąd w aktualizacji/wstawianiu | Sterownik MongoDB Java

  3. Utwórz drzewo węzłów z tabelą rekurencyjną za pomocą Express i Mongo

  4. Jak zaktualizować konkretny element tablicy w MongoDB

  5. Wyszukiwanie agregujące mongoDB na zagnieżdżonej tablicy obiektów