MongoDB SELECT COUNT GROUP BY

Я играю с 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++;
    }
});

Но существует ли более простой/более быстрый способ использования агрегатной функции?

+112
источник поделиться
6 ответов

Это был бы более простой способ сделать это, используя aggregate:

db.contest.aggregate([
    {"$group" : {_id:"$province", count:{$sum:1}}}
])
+217
источник

Если вам нужно сгруппировать несколько столбцов, следуйте этой модели. Здесь я веду подсчет по status и type:

  db.BusinessProcess.aggregate({
    "$group": {
        _id: {
            status: "$status",
            type: "$type"
        },
        count: {
            $sum: 1
        }
    }
   })
+35
источник
другие ответы

Связанные вопросы


Похожие вопросы

Мне нужна дополнительная операция, основанная на результате агрегатной функции. Наконец, я нашел некоторое решение для агрегатной функции и операции, основанной на результате в MongoDB. У меня есть коллекция Request с полем request, source, status, requestDate.

Единая группа полей по количеству и количеству:

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

Поля нескольких полей и количество:

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}}
])

Несколько полей по группам и подсчету с помощью сортировки с использованием Count:

db.Request.aggregate([
    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
    {$sort:{"count":-1}}
])
+32
источник

Кроме того, если вам нужно ограничить группировку, вы можете использовать:

db.events.aggregate( 
    {$match: {province: "ON"}},
    {$group: {_id: "$date", number: {$sum: 1}}}  
)
+10
источник

Этот тип запроса работал у меня:

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

См. http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/

+6
источник

Начиная с MongoDB 3.4, вы можете использовать агрегацию $sortByCount.

Группирует входящие документы на основе значения указанного выражения, а затем вычисляет количество документов в каждой отдельной группе.

https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/

Например:

db.contest.aggregate([
    { $sortByCount: "$province" }
]);
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос