Użyj $match
operatora, aby filtrować dokumenty dostające się do potoku.
Pobierz listę identyfikatorów zamówień (do użycia w $match
potok z $in
) przy użyciu find()
kursor 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 } } }
])
W przypadku MongoDB 3.2 użyj $lookup
operator, który wykonuje lewe zewnętrzne sprzężenie do nieshardowanej kolekcji w tej samej bazie danych w celu filtrowania dokumentów z „połączonej” kolekcji w celu przetworzenia.
Poniższy przykład pokazuje, jak można uruchomić operację agregacji na zamówieniach
odbiór łączący dokumenty z zamówień
z dokumentami z dostawy
odbiór za pomocą pola zamówienie
z dostawy
kolekcja:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])