Použijte $match
operátora pro filtrování dokumentů, které se dostanou do vašeho kanálu.
Získejte seznam ID objednávek (k použití v $match
potrubí s $in
) pomocí find()
kurzor map()
metoda:
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 } } }
])
Pro MongoDB 3.2 použijte $lookup
operátor, který provede levé vnější spojení s neshardovanou sbírkou ve stejné databázi za účelem filtrování dokumentů ze „připojené“ kolekce ke zpracování.
Následující příklad ukazuje, jak můžete spustit operaci agregace na objednávkách
kolekce spojující dokumenty z objednávek
s dokumenty z doručení
odběr pomocí pole objednávka
z doručení
kolekce:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])