Använd $match
operatör för att filtrera dokumenten som kommer in i din pipeline.
Hämta listan med beställnings-ID (att använda i $match
pipeline med $in
) genom att använda find()
markörens karta()
metod:
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 } } }
])
För MongoDB 3.2, använd $lookup
operatör som gör en vänster yttre koppling till en odelad samling i samma databas för att filtrera in dokument från den "anslutna" samlingen för bearbetning.
Följande exempel visar hur du kan köra aggregeringsoperationen på order
samling som går med i dokumenten från order
med dokumenten från leverans
samling med fältet order
från leveransen
samling:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])