sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur arrayFilters-parametern fungerar i MongoDB

I MongoDB, när du uppdaterar dokument som innehåller arrayer, har du möjlighet att använda arrayFilters parameter.

arrayFilters parametern låter dig ange en array av filterdokument som bestämmer vilka arrayelement som ska ändras.

I uppdateringsdokumentet använder du $[<identifier>] filtrerad positionsoperator, som identifierar arrayelementen som matchar arrayFilters villkor för uppdateringen.

Syntax

Syntaxen ser ut så här:

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

Så till exempel när den används med updateMany() metod går det så här:

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

Exempel

Anta att vi har en samling som heter players med följande dokument:

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

Vi skulle kunna använda arrayFilters parameter för att endast uppdatera de arrayelement som har ett värde som är högre än ett visst belopp.

Exempel:

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

Resultat:

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

Meddelandet berättar att tre dokument matchades och modifierades.

Så här ser dokumenten ut 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 att alla värden som tidigare var större än eller lika med 10 nu är 10.

I det här fallet använde jag e som <identifier> . Observera att <identifier> måste börja med en liten bokstav och endast innehålla alfanumeriska tecken.


  1. MongoDB Visa aktuell användare

  2. Returnera resultat endast som en matris med värden

  3. explain() i Mongodb:skillnader mellan nscanned och nscannedObjects

  4. Vilka är fördelarna med att använda en schemafri databas som MongoDB jämfört med en relationsdatabas?