Use el $match
operador para filtrar los documentos que ingresan a su tubería.
Obtenga la lista de ID de pedido (para usar en $match
tubería con $in
) usando find()
cursor map()
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, utilice el $lookup
operador que realiza una unión externa izquierda a una colección no fragmentada en la misma base de datos para filtrar documentos de la colección "unida" para su procesamiento.
El siguiente ejemplo muestra cómo puede ejecutar la operación de agregación en los orders
colección que une los documentos de orders
con los documentos de la delivery
colección usando el campo order
de la delivery
colección:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])