Brug $match
operatør til at filtrere de dokumenter, der kommer ind i din pipeline.
Hent listen over ordre-id'er (til brug i $match
pipeline med $in
) ved at bruge find()
markørens kort()
metode:
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 } } }
])
Til MongoDB 3.2 skal du bruge $lookup
operatør, der laver en venstre ydre joinforbindelse til en ikke-delt samling i den samme database for at filtrere dokumenter fra den "joined" samling ind til behandling.
Følgende eksempel viser, hvordan du kan køre aggregeringsoperationen på ordrerne
samling, der slutter sig til dokumenterne fra ordrer
med dokumenterne fra leveringen
samling ved hjælp af feltet ordre
fra leveringen
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 } } }
])