Use o
$match
operador para filtrar os documentos que chegam ao seu pipeline. Obtenha a lista de IDs de pedidos (para usar no
$match
pipeline com $in
) usando o find()
map()
do cursor
método:var orderIds = db.delivery.find({"status": "DELIVERED"}).map(function(d){return d.order;});
db.orders.aggregate([
{ "$match": { "_id": { "$in": orderIds } } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])
Para MongoDB 3.2, use o
$lookup
operador que faz uma junção externa esquerda a uma coleção não fragmentada no mesmo banco de dados para filtrar documentos da coleção "juntada" para processamento. O exemplo a seguir mostra como você pode executar a operação de agregação nos
orders
coleção juntando os documentos de pedidos
com os documentos da entrega
coleção usando o campo order
da entrega
coleção:db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])