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",

Другие вопросы по тегам