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

Jak działa parametr arrayFilters w MongoDB

W MongoDB, kiedy aktualizujesz dokumenty zawierające tablice, możesz użyć arrayFilters parametr.

arrayFilters parametr pozwala określić tablicę dokumentów filtrów, które określają, które elementy tablicy należy zmodyfikować.

W dokumencie aktualizacji użyj $[<identifier>] filtrowany operator pozycyjny, który identyfikuje elementy tablicy pasujące do arrayFilters warunki operacji aktualizacji.

Składnia

Składnia wygląda tak:

{ <update operator>: { "<array>.$[<identifier>]" : value } },
{ arrayFilters: [ { <identifier>: <condition> } ] }

Na przykład, gdy jest używany z updateMany() metoda, wygląda to tak:

db.collection.updateMany(
   { <query conditions> },
   { <update operator>: { "<array>.$[<identifier>]" : value } },
   { arrayFilters: [ { <identifier>: <condition> } ] }
)

Przykład

Załóżmy, że mamy kolekcję o nazwie players z następującymi dokumentami:

{ "_id" : 1, "scores" : [ 1, 5, 17 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] }

Moglibyśmy użyć arrayFilters parametr, aby zaktualizować tylko te elementy tablicy, które mają wartość wyższą niż określona ilość.

Przykład:

db.players.updateMany(
   { scores: { $gte: 10 } },
   { $set: { "scores.$[e]" : 10 } },
   { arrayFilters: [ { "e": { $gte: 10 } } ] }
)

Wynik:

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

Wiadomość informuje nas, że trzy dokumenty zostały dopasowane i zmodyfikowane.

Oto, jak teraz wyglądają dokumenty.

db.players.find()

Wynik:

{ "_id" : 1, "scores" : [ 1, 5, 10 ] }
{ "_id" : 2, "scores" : [ 8, 10, 10 ] }
{ "_id" : 3, "scores" : [ 10, 10, 8 ] }

Widzimy, że wszystkie wartości, które wcześniej były większe lub równe 10, to teraz 10.

W tym przypadku użyłem e jako <identifier> . Zauważ, że <identifier> musi zaczynać się od małej litery i zawierać tylko znaki alfanumeryczne.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Powłoka MongoDB i serwer nie pasują do siebie

  2. Jak zaktualizować wartości za pomocą pymongo?

  3. Skrobanie stron internetowych za pomocą Scrapy i MongoDB

  4. Czy istnieje sposób na odzyskanie ostatnio usuniętych dokumentów w MongoDB?

  5. Jak usunąć bazę danych MongoDB z wiersza poleceń?