Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$filtro (agregación)

$filter

Nuevo en la versión 3.2.

Selecciona un subconjunto de un arreglo para devolverlo según la condición especificada. Devuelve un arreglo con solo aquellos elementos que cumplen con la condición. Los elementos devueltos están en el orden original.

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.

$filter tiene la siguiente sintaxis:

{
$filter:
{
input: <array>,
cond: <expression>,
as: <string>,
limit: <number expression>
}
}
Campo
Especificación

input

Una expresión que se evalúa en un arreglo.

Si input se resuelve en null o hace referencia a un campo que falta, $filter devuelve null.

Si input se resuelve en un valor que no es un arreglo ni nulo, el pipeline presenta errores.

cond

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 input individualmente con el nombre de variable especificado en as.

as

Opcional. Un nombre para la variable que representa cada elemento individual del arreglo input. Si no se especifica un nombre, el nombre de la variable por defecto es this.

limit

Opcional. Una expresión numérica que limita la cantidad de elementos coincidentes del arreglo que $filter devuelve. No se puede especificar un límite inferior a 1. Los elementos coincidentes del arreglo se devuelven en el orden en que aparecen en el arreglo de entrada.

Si el limit especificado es mayor que el número de elementos coincidentes del arreglo, $filter devuelve todos los elementos coincidentes del arreglo. Si el límite es null, $filter devuelve todos los elementos del arreglo que coinciden.

Para obtener más información sobre las expresiones, consulta Expresiones.

Ejemplo
Resultados
{
$filter: {
input: [ 1, "a", 2, null, 3.1, NumberLong(4), "5" ],
as: "num",
cond: { $and: [
{ $gte: [ "$$num", NumberLong("-9223372036854775807") ] },
{ $lte: [ "$$num", NumberLong("9223372036854775807") ] }
] }
}
}

[ 1, 2, 3.1, NumberLong(4) ]

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" : [ ] }

Volver

$expMovingAvg

En esta página