Gunakan $match
operator untuk memfilter dokumen yang masuk ke saluran Anda.
Dapatkan daftar id pesanan (untuk digunakan di $match
pipeline dengan $in
) dengan menggunakan find()
map()
kursor
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 } } }
])
Untuk MongoDB 3.2, gunakan $lookup
operator yang melakukan gabungan luar kiri ke koleksi yang tidak di-sharding dalam database yang sama untuk memfilter dokumen dari koleksi "bergabung" untuk diproses.
Contoh berikut menunjukkan bagaimana Anda dapat menjalankan operasi agregasi pada orders
koleksi bergabung dengan dokumen dari orders
dengan dokumen dari delivery
koleksi menggunakan bidang order
dari delivery
koleksi:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])