Я играю с 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++;
}
});
Но есть ли более простой / быстрый способ использования агрегатной функции?
"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.",
?{ $sort: { count: -1 } }
Мне нужна дополнительная операция на основе результата агрегатной функции. Наконец, я нашел какое-то решение для агрегатной функции и операции, основанной на результате в MongoDB. У меня есть коллекция
Request
с полемrequest, source, status, requestDate
.Единичная группа полей по количеству:
Группировка по нескольким полям по количеству:
Группировка нескольких полей по количеству полей с сортировкой по полю:
Сгруппировать несколько полей по количеству полей с сортировкой по количеству:
источник
Если вам нужно сгруппировать несколько столбцов, следуйте этой модели. Здесь я веду отсчет по
status
иtype
:источник
Кроме того, если вам нужно ограничить группировку, вы можете использовать:
источник
Начиная с MongoDB 3.4, вы можете использовать
$sortByCount
агрегацию.https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
Например:
источник
$sortByCount
на самом деле это «псевдооператор», как еще несколько операторов стадии агрегации, представленных в MongoDB 3.4. Все, что они на самом деле делают, - это расширяются на соответствующие стадии агрегации В этом случае$group
с ,$sum: 1
как показано на существующих ответов и дополнительной$sort
стадии. Они не предлагают никаких преимуществ, кроме «ввода меньшего количества кода» , который может быть, а может и не быть более наглядным (если вы любите подобные вещи). ИМХО, отдельные$group
и$sort
этапы в коде гораздо более наглядны и действительно более гибки.Этот тип запроса работал для меня:
См. Http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/.
источник
Команда оболочки Mongo, которая работала для меня:
источник