$filter (agregação)
Definição
Compatibilidade
Você pode utilizar o $filter
para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
$filter
tem a seguinte sintaxe:
{ $filter: { input: <array>, cond: <expression>, as: <string>, limit: <number expression> } }
Campo | Especificação |
---|---|
input | Uma expressão que se torna uma array. |
cond | Uma expressão que se torna um valor booleano utilizado para determinar se um elemento deve ser incluído na array de saída. A expressão referencia cada elemento da array input individualmente com o nome da variável especificado em as . |
as | Opcional. Um nome para a variável que representa cada elemento individual da array input . Se nenhum nome for especificado, o nome da variável padrão será this . |
limit | Opcional. Uma expressão numérica que restringe o número de elementos de array correspondentes que Se o |
Para mais informações sobre expressões, consulte Expressões.
Comportamento
Exemplo | Resultados | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| [ 1, 2, 3.1, NumberLong(4) ] |
Exemplo
Uma coleção sales
possui os seguintes 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 } ] }
O exemplo a seguir filtra a array items
para incluir somente documentos que tenham um price
maior ou igual a 100
:
db.sales.aggregate([ { $project: { items: { $filter: { input: "$items", as: "item", cond: { $gte: [ "$$item.price", 100 ] } } } } } ])
A operação produz os seguintes 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" : [ ] }