2014-04-16 18 views
84

jestem zabawy z MongoDB próbuje dowiedzieć się, jak zrobić prostyMongoDB SELECT COUNT GROUP BY

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

Ale ja nie potrafię zrozumieć to używając funkcji zbiorczą. Mogę to zrobić, używając jakiejś naprawdę dziwnej składni grupy, ale czy istnieje łatwiejszy/szybszy sposób użycia funkcji agregującej?

+0

Ten link może Ci pomóc http : //www.codefari.com/2015/12/group-aggregation-in-mongodb.html – Singh

Odpowiedz

153

będzie to łatwiejszy sposób to zrobić przy użyciu aggregate:

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

Otrzymuję komunikat o błędzie, gdy próbuję tego "errmsg": "wyjątek: Objac specyfikacji etapu rurociągu t musi zawierać dokładnie jedno pole. ",'? – Steven

+0

NVM Rozgryzłem to, po prostu wymagałem trochę z nim zamieszania – Steven

+0

Dziękuję, właśnie to, czego potrzebowałem. – csharpbd

29

Jeśli potrzebujesz wiele kolumn do pogrupuj według, wykonaj ten model. Oto jestem prowadzenia zliczania przez status i type:

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

I ' wykorzystaliśmy to podejście. Dobrze pracować. –

12

muszę jakieś dodatkowe działanie opiera się na wyniku funkcji zbiorczej. W końcu znalazłem rozwiązanie dla funkcji agregującej i operacji opartej na wyniku w MongoDB. Mam kolekcję Request z polem request, source, status, requestDate.

jednym polu Group By & Hrabiego:

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

wielu pól Group By & Count:

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

wielu pól GROUP BY & liczyć się z Sortuj użyciu polu:

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

wielu pól Group By & hrabiego z Sortuj wykorzystaniem Hrabiego:

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

Dodatkowo, jeśli chcesz ograniczyć grupowania można użyć:

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