Sử dụng $ so khớp
để lọc các tài liệu đi vào đường dẫn của bạn.
Nhận danh sách id đơn đặt hàng (để sử dụng trong $ match
đường dẫn với $ in
) bằng cách sử dụng find ()
của con trỏ map ()
phương pháp:
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 } } }
])
Đối với MongoDB 3.2, hãy sử dụng $ lookup
toán tử thực hiện phép nối bên ngoài bên trái vào một bộ sưu tập chưa được cứng trong cùng một cơ sở dữ liệu để lọc trong các tài liệu từ bộ sưu tập "đã kết hợp" để xử lý.
Ví dụ sau cho thấy cách bạn có thể chạy hoạt động tổng hợp trên đơn đặt hàng
bộ sưu tập kết hợp các tài liệu từ đơn đặt hàng
với các tài liệu từ giao hàng
bộ sưu tập sử dụng trường order
từ giao hàng
bộ sưu tập:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])