MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как работи параметърът arrayFilters в MongoDB

В MongoDB, когато актуализирате документи, които съдържат масиви, имате възможност да използвате arrayFilters параметър.

arrayFilters параметърът ви позволява да зададете масив от филтриращи документи, които определят кои елементи на масива да модифицирате.

В документа за актуализиране използвайте $[<identifier>] филтриран позиционен оператор, който идентифицира елементите на масива, които съответстват на arrayFilters условия за операцията по актуализиране.

Синтаксис

Синтаксисът е така:

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

Така например, когато се използва с updateMany() метод, става така:

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

Пример

Да предположим, че имаме колекция, наречена players със следните документи:

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

Можем да използваме arrayFilters параметър за актуализиране само на онези елементи от масива, които имат стойност, по-висока от определено количество.

Пример:

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

Резултат:

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

Съобщението ни казва, че три документа са съпоставени и променени.

Ето как изглеждат документите сега.

db.players.find()

Резултат:

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

Можем да видим, че всички стойности, които преди са били по-големи или равни на 10, сега са 10.

В този случай използвах e като <identifier> . Имайте предвид, че <identifier> трябва да започва с малка буква и да съдържа само буквено-цифрови знаци.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 'process.nextTick(function() { throw err; })' - Undefined не е функция (mongodb/mongoose)

  2. Как да получите множество документи, използвайки масив от MongoDb идентификатор?

  3. MongoDB „не може да намери индекс за $geoNear заявка“

  4. Каква е разликата между методите insert(), insertOne() и insertMany()?

  5. Как да направя заявка NOT IN в Mongo?