Gebruik de $match
operator om de documenten die in uw pijplijn terechtkomen te filteren.
Download de lijst met bestel-ID's (te gebruiken in de $match
pijplijn met $in
) met behulp van de find()
cursor's map()
methode:
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 } } }
])
Gebruik voor MongoDB 3.2 de $lookup
operator die een left outer join doet met een niet-gecodeerde verzameling in dezelfde database om documenten uit de "samengevoegde" verzameling te filteren voor verwerking.
Het volgende voorbeeld laat zien hoe u de aggregatiebewerking kunt uitvoeren op de orders
collectie samenvoegen van de documenten van orders
met de documenten van de delivery
ophalen met behulp van het veld order
vanaf de delivery
collectie:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])