MongoDB выберите количество групп по
Я играю с MongoDB, пытаясь выяснить, как сделать простой
SELECT province, COUNT(*) FROM contest GROUP BY province
но я не могу понять это, используя агрегатную функцию. Я могу сделать это, используя какой-то действительно странный синтаксис группы
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++;
}
});
но есть ли более простой / быстрый способ использования агрегатной функции?
5 ответов:
это будет простой способ сделать это с помощью
aggregate
:db.contest.aggregate([ {"$group" : {_id:"$province", count:{$sum:1}}} ])
Если вам нужно несколько столбцов в группе, следовать этой модели. Вот я веду подсчет по
status
иtype
:db.BusinessProcess.aggregate( {"$group" : {_id : {status:"$status", type: "$type"}, count : { $sum : 1} } } )
мне нужна дополнительная операция, основанная на результате агрегатной функции. Наконец, я нашел некоторое решение для агрегатной функции и операции, основанной на результате в MongoDB. У меня есть коллекция
Request
в полеrequest, source, status, requestDate
.Одна Группа Полей По & Count:
db.Request.aggregate([ {"$group" : {_id:"$source", count:{$sum:1}}} ])
Несколько Полей Группируются По & Count:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}} ])
группа полей и Граф с помощью Поле:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, {$sort:{"_id.source":1}} ])
группа полей и Граф с помощью графа:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, {$sort:{"count":-1}} ])
этот тип запроса работал для меня:
db.events.aggregate({$group: {_id : "$date", number: { $sum : 1} }} )
см http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/