2014-04-16 30 views
84

tôi đang chơi xung quanh với MongoDB cố gắng tìm hiểu làm thế nào để làm một đơn giảnMongoDB SELECT COUNT GROUP BY

SELECT province, COUNT(*) FROM contest GROUP BY province 

Nhưng tôi dường như không thể hình dung nó ra bằng cách sử dụng chức năng tổng hợp. Tôi có thể làm điều đó bằng cách sử dụng một số cú pháp nhóm thực sự kỳ lạ

db.user.group({ 
    "key": { 
     "province": true 
    }, 
    "initial": { 
     "count": 0 
    }, 
    "reduce": function(obj, prev) { 
     if (true != null) if (true instanceof Array) prev.count += true.length; 
     else prev.count++; 
    } 
}); 

Nhưng có cách nào dễ dàng hơn/nhanh hơn bằng cách sử dụng chức năng tổng hợp?

+0

Liên kết này có thể giúp bạn http : //www.codefari.com/2015/12/group-aggregation-in-mongodb.html – Singh

Trả lời

153

Đây sẽ là cách dễ dàng hơn để làm điều đó bằng aggregate:

db.contest.aggregate([ 
    {"$group" : {_id:"$province", count:{$sum:1}}} 
]) 
+0

Tôi nhận được thông báo lỗi khi thử "' errmsg ":" ngoại lệ: Thông số kỹ thuật giai đoạn đường ống objec t phải chứa chính xác một trường. ",'? – Steven

+0

NVM Tôi đã tìm ra nó, chỉ cần một số rắc rối với nó – Steven

+0

Cảm ơn bạn, chỉ là những gì tôi cần. – csharpbd

29

Nếu bạn cần nhiều cột để nhóm theo, làm theo mô hình này. Ở đây tôi đang tiến hành một số bằng statustype:

db.BusinessProcess.aggregate({"$group" : {_id : {status:"$status", type: "$type"}, count : { $sum : 1} } }) 
+0

I ' đã sử dụng phương pháp này. Làm việc tốt. –

12

Tôi cần một số hoạt động thêm dựa trên kết quả của chức năng tổng hợp. Cuối cùng tôi đã tìm thấy một số giải pháp cho hàm tổng hợp và hoạt động dựa trên kết quả trong MongoDB. Tôi đã có một bộ sưu tập Request với trường request, source, status, requestDate.

Độc Dòng Nhóm By & Count:

db.Request.aggregate([ 
    {"$group" : {_id:"$source", count:{$sum:1}}} 
]) 

Nhiều Fields Nhóm By & Count:

db.Request.aggregate([ 
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}} 
]) 

Nhiều Fields Nhóm By & Đếm với Sắp xếp sử dụng Field:

db.Request.aggregate([ 
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, 
    {$sort:{"_id.source":1}} 
]) 

Nhiều Fields Nhóm By & Đếm với Sắp xếp sử dụng Count:

db.Request.aggregate([ 
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, 
    {$sort:{"count":-1}} 
]) 
0

Ngoài ra nếu bạn cần phải hạn chế các nhóm bạn có thể sử dụng:

db.events.aggregate( 
    {$match: {province: "ON"}}, 
    {$group: {_id: "$date", number: {$sum: 1}}} 
)