Mongodb, как агрегировать количество вхождений (кол-во) разных значений?
У меня есть набор с 2м хэштегами. Тем не менее, только около 200 КБ являются различными значениями. Я хочу знать, какие хештеги более повторяются в моих данных.
Я использовал это, чтобы узнать, сколько раз каждый хэштег повторяется в моем наборе данных:
db.hashtags.aggregate([{ "$group": {"_id": "$hashtag","count": { "$sum": 1 }}}]);
Однако я хотел бы сохранить значения в отдельной коллекции только с уникальными значениями и номером соответствия.
Как мне это сделать?
Пожалуйста, если возможно, предоставьте мне некоторую информацию, чтобы я мог ПОНИМАТЬ, как это сделать, а не только код. Спасибо.
2 ответа
Вы можете использовать $out
оператор конвейера записывает вывод агрегации в другую коллекцию.
db.hashtags.aggregate([
{ "$group": {"_id": "$hashtag", "count": { "$sum": 1 }}},
{ "$out": "newcoll" }
]);
Обратите внимание, что эта функция была добавлена в MongoDB 2.6
Используя структуру агрегации, для hashtag
с несколькими записями, вернуть дубликат hashtag
и соответствующий счетчик записей:
db.hashtags.aggregate([
{
$group: {
_id: "$hashtag",
count: { $sum: 1 }
}
},
{ $match: { count: { $gt: 1 } } },
{ $sort : { count : -1} },
{ $limit : 200 },
{ $out: "duphashtags" }
])
$sum
Оператор суммирует значения полей, переданных ему, в данном случае константу 1 - тем самым подсчитывая количество сгруппированных записей в поле count. $match
фильтрует документы с числом больше 1, т.е. дублирует. $sort
сначала сортирует самые частые дубликаты и ограничивает результаты до 200 лучших. $out
оператор записывает документы, возвращенные конвейером агрегации, в указанную коллекцию, скажем "duphashtags"
,