Mongodb如何聚合不同值的出现次数(次数)?

时间:2015-01-26 15:03:51

标签: mongodb

我有一个2m标签集。然而,只有大约200k是不同的值。我想知道我的数据上更多的重复标签。

我用它来查找在我的数据集上重复每个#标签的次数:

db.hashtags.aggregate([{ "$group": {"_id": "$hashtag","count": { "$sum": 1 }}}]);

但是,我想将值保存在一个不同的集合中,只有唯一值及其相应的出现次数。

我该怎么做?

请尽可能提供一些信息,以便我能理解如何不仅仅是代码。 谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用$out管道运算符将聚合的输出写入另一个集合。

db.hashtags.aggregate([
    { "$group": {"_id": "$hashtag", "count": { "$sum": 1 }}},
    { "$out": "newcoll" }
]);

请注意,此功能已添加到MongoDB 2.6

答案 1 :(得分:1)

对于具有多条记录的hashtag,使用aggregation framework以下内容将返回重复的hashtag和相应的记录数:

db.hashtags.aggregate([
   {
     $group: {
        _id: "$hashtag",
        count: { $sum: 1 }
     }
   },  
   { $match: { count: { $gt: 1 } } },   
   { $sort : { count : -1} },
   { $limit : 200 },
   { $out: "duphashtags" }
])

$sum运算符将传递给它的字段的值相加,在本例中为常量1 - 从而将分组记录的数量计入计数字段。 $match过滤计数大于1的文档,即重复。 $sort首先对最常见的重复项进行排序,并将结果限制在前200位。$out运算符将聚合管道返回的文档写入指定的集合,例如"duphashtags"