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

Come funziona il parametro arrayFilters in MongoDB

In MongoDB, quando aggiorni documenti che contengono array, hai la possibilità di usare gli arrayFilters parametro.

Gli arrayFilters consente di specificare un array di documenti filtro che determinano quali elementi dell'array modificare.

Nel documento di aggiornamento, usa il $[<identifier>] operatore posizionale filtrato, che identifica gli elementi dell'array che corrispondono a arrayFilters condizioni per l'operazione di aggiornamento.

Sintassi

La sintassi è questa:

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

Ad esempio, se utilizzato con updateMany() metodo, funziona così:

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

Esempio

Supponiamo di avere una collezione chiamata players con i seguenti documenti:

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

Potremmo usare gli arrayFilters parametro per aggiornare solo gli elementi dell'array che hanno un valore superiore a un determinato importo.

Esempio:

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

Risultato:

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

Il messaggio ci dice che tre documenti sono stati abbinati e modificati.

Ecco come sono ora i documenti.

db.players.find()

Risultato:

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

Possiamo vedere che tutti i valori che prima erano maggiori o uguali a 10 ora sono 10.

In questo caso, ho usato e come <identifier> . Si noti che il <identifier> deve iniziare con una lettera minuscola e contenere solo caratteri alfanumerici.