Verwenden Sie den $match
Operator, um die Dokumente zu filtern, die in Ihre Pipeline gelangen.
Rufen Sie die Liste der Auftrags-IDs ab (zur Verwendung im $match
Pipeline mit $in
) mithilfe von find()
map() des Cursors
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 } } }
])
Verwenden Sie für MongoDB 3.2 den $lookup
-Operator, der einen Left Outer Join mit einer unsharded-Sammlung in derselben Datenbank durchführt, um Dokumente aus der "verbundenen" Sammlung zur Verarbeitung einzufiltern.
Das folgende Beispiel zeigt, wie Sie die Aggregationsoperation für die orders ausführen können Sammlung, die die Dokumente von orders zusammenfügt mit den Dokumenten aus der delivery Abholung über das Feld order aus der delivery Sammlung:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])