Използвайте $matchкод>
оператор за филтриране на документите, влизащи във вашия конвейер.
Вземете списъка с идентификатори на поръчки (за използване в $match
конвейер с $in
) с помощта на find()код>
map()
на курсора
метод:
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 } } }
])
За MongoDB 3.2 използвайте $lookupкод>
оператор, който прави ляво външно присъединяване към неразделена колекция в същата база данни, за да филтрира документи от „присъединената“ колекция за обработка.
Следващият пример показва как можете да изпълните операцията за агрегиране на поръчките
събиране на документи от поръчки
с документите от доставката
събиране с помощта на полето order
от доставката
колекция:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])