sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan arrayFilters-parameteren fungerer i MongoDB

I MongoDB, når du opdaterer dokumenter, der indeholder arrays, har du mulighed for at bruge arrayFilters parameter.

arrayFilters parameter giver dig mulighed for at specificere et array af filterdokumenter, der bestemmer hvilke array-elementer der skal ændres.

I opdateringsdokumentet skal du bruge $[<identifier>] filtreret positionsoperator, som identificerer de matrixelementer, der matcher arrayFilters betingelser for opdateringen.

Syntaks

Syntaksen ser sådan ud:

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

Så for eksempel, når det bruges sammen med updateMany() metode, går det sådan her:

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

Eksempel

Antag, at vi har en samling kaldet players med følgende dokumenter:

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

Vi kunne bruge arrayFilters parameter for kun at opdatere de array-elementer, der har en værdi, der er højere end en vis mængde.

Eksempel:

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

Resultat:

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

Meddelelsen fortæller os, at tre dokumenter blev matchet og ændret.

Sådan ser dokumenterne ud nu.

db.players.find() 

Resultat:

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

Vi kan se, at alle værdier, der tidligere var større end eller lig med 10, nu er 10.

I dette tilfælde brugte jeg e som <identifier> . Bemærk, at <identifier> skal begynde med et lille bogstav og kun indeholde alfanumeriske tegn.


  1. konfigurer redis auth på sidekiq

  2. Sådan flettes matrixfelt i dokument i Mongo-aggregation

  3. Sådan kopieres en samling fra en database til en anden i MongoDB

  4. Hvordan designer man redis pub/sub til et onlinemeddelelsessystem?