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

Jak funguje parametr arrayFilters v MongoDB

V MongoDB, když aktualizujete dokumenty, které obsahují pole, máte možnost použít arrayFilters parametr.

arrayFilters Parametr umožňuje zadat pole dokumentů filtru, které určují, které prvky pole se mají upravit.

V dokumentu aktualizace použijte $[<identifier>] filtrovaný poziční operátor, který identifikuje prvky pole, které odpovídají arrayFilters podmínky pro operaci aktualizace.

Syntaxe

Syntaxe vypadá takto:

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

Například při použití s ​​updateMany() metoda, vypadá to takto:

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

Příklad

Předpokládejme, že máme kolekci nazvanou players s následujícími dokumenty:

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

Mohli bychom použít arrayFilters pro aktualizaci pouze těch prvků pole, které mají hodnotu vyšší než určité množství.

Příklad:

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

Výsledek:

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

Zpráva nám říká, že byly spárovány a upraveny tři dokumenty.

Takto nyní dokumenty vypadají.

db.players.find()

Výsledek:

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

Vidíme, že všechny hodnoty, které byly dříve větší nebo rovné 10, jsou nyní 10.

V tomto případě jsem použil e jako <identifier> . Všimněte si, že <identifier> musí začínat malým písmenem a obsahovat pouze alfanumerické znaky.


  1. Jak se v Mongu dotazujete, zda není null?

  2. jak udržovat ukládání do mezipaměti aktuální

  3. Mongoose vždy vrací prázdné pole NodeJS

  4. MongoDB:Jak se dotazovat na záznamy, kde je pole null nebo není nastaveno?