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 } } }
])