Usa $match
operatore per filtrare i documenti che entrano nella pipeline.
Ottieni l'elenco degli ID degli ordini (da utilizzare nel $match
pipeline con $in
) utilizzando find()
map()
del cursore
metodo:
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 } } }
])
Per MongoDB 3.2, usa $lookup
operatore che esegue un join esterno sinistro a una raccolta non partizionata nello stesso database per filtrare i documenti dalla raccolta "unita" per l'elaborazione.
L'esempio seguente mostra come eseguire l'operazione di aggregazione sugli orders
raccolta unendo i documenti da orders
con i documenti della delivery
ritiro utilizzando il campo order
dalla delivery
collezione:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])