2015-01-18 18 views
24

Tôi có một số tài liệu như thế này:Mongo đếm lần xuất hiện của mỗi giá trị cho một tập hợp các tài liệu

{ 
    "user": '1' 
}, 
{ "user": '1' 
}, 
{ 
    "user": '2' 
}, 
{ 
    "user": '3' 
} 

Tôi muốn để có thể có được một tập của tất cả các người dùng khác nhau và số lượng tương ứng của họ, sắp xếp theo thứ tự giảm dần. Vì vậy, sản lượng của tôi sẽ là một cái gì đó như thế này:

{ 
    '1': 2, 
    '2': 1, 
    '3': 1 
} 

Tôi nghĩ rằng điều này có thể được thực hiện với một tổng hợp Mongo(), nhưng tôi đang gặp rất nhiều khó khăn trong việc tìm ra dòng chảy phù hợp cho điều này.

+0

nó rất dễ dàng để có được câu trả lời qua tập hợp (đầu ra sẽ là): "0": { "_id": "2", "đếm": 1 }, "1": { "_id": "3", "count": 1 }, "2": { "_id": "1", "count": 2 } – Disposer

+0

Bạn sẽ tính số lần xuất hiện cho từng trường như thế nào? – ritmatter

Trả lời

33

Bạn có thể nhận được kết quả (không ở định dạng yêu cầu của bạn) thông qua aggregation

db.collection.aggregate(
    {$group : { _id : '$user', count : {$sum : 1}}} 
).result 

đầu ra cho các tài liệu mẫu của bạn là:

"0" : { 
    "_id" : "2", 
    "count" : 1 
}, 
"1" : { 
    "_id" : "3", 
    "count" : 1 
}, 
"2" : { 
    "_id" : "1", 
    "count" : 2 
} 
+0

Điều này thật tuyệt vời, cảm ơn! – ritmatter

+0

@Disposer cảm ơn bạn! – Wilson

Các vấn đề liên quan