Definición
Compatibilidad
Puedes usar $filter para implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
$filter tiene la siguiente sintaxis:
{ $filter: { input: <array>, cond: <expression>, as: <string>, limit: <number expression> } }
Campo | Especificación |
|---|---|
| Una expresión que se evalúa en un arreglo. Si Si |
| Una expresión que se resuelve en un valor booleano utilizado para determinar si un elemento debe incluirse en el arreglo de salida. La expresión hace referencia a cada elemento del arreglo |
| Opcional. Un nombre para la variable que representa cada elemento individual del arreglo |
| Opcional. Una expresión numérica que limita la cantidad de elementos coincidentes del arreglo que Si el |
Para obtener más información sobre las expresiones, consulta Expresiones.
Comportamiento
Ejemplo | Resultados | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Ejemplo
Una colección sales tiene los siguientes documentos:
{ _id: 0, items: [ { item_id: 43, quantity: 2, price: 10 }, { item_id: 2, quantity: 1, price: 240 } ] } { _id: 1, items: [ { item_id: 23, quantity: 3, price: 110 }, { item_id: 103, quantity: 4, price: 5 }, { item_id: 38, quantity: 1, price: 300 } ] } { _id: 2, items: [ { item_id: 4, quantity: 1, price: 23 } ] }
El siguiente ejemplo filtra el arreglo items para incluir solo documentos que tengan un price mayor o igual a 100:
db.sales.aggregate([ { $project: { items: { $filter: { input: "$items", as: "item", cond: { $gte: [ "$$item.price", 100 ] } } } } } ])
La operación produce los siguientes resultados:
{ "_id" : 0, "items" : [ { "item_id" : 2, "quantity" : 1, "price" : 240 } ] } { "_id" : 1, "items" : [ { "item_id" : 23, "quantity" : 3, "price" : 110 }, { "item_id" : 38, "quantity" : 1, "price" : 300 } ] } { "_id" : 2, "items" : [ ] }