Sử dụng bản đồ / thu nhỏ cho nhiệm vụ đơn giản đó giống như sử dụng một chiếc búa tạ (tương đối chậm) để bẻ một đai ốc. khuôn khổ tổng hợp về cơ bản đã được phát minh cho loại tập hợp đơn giản này (và có thể làm được nhiều việc hơn cho bạn!):
db.order.aggregate([
{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
{ "$out": "order_total"}
])
Tùy thuộc vào trường hợp sử dụng của bạn, bạn thậm chí có thể bỏ qua $out
giai đoạn và tiêu thụ kết quả trực tiếp.
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }
Lưu ý rằng với các bộ sưu tập rất lớn, điều này rất có thể không phù hợp, vì nó sẽ mất một khoảng thời gian (nhưng nó vẫn sẽ nhanh hơn thao tác bản đồ / thu nhỏ).
Để tìm số lượng đơn đặt hàng của một khách hàng, bạn có thể sử dụng một truy vấn đơn giản và sử dụng cursor.count () phương pháp:
> db.orders.find({ "customer": "a" }).count()
3