我有一个2m标签集。然而,只有大约200k是不同的值。我想知道我的数据上更多的重复标签。
我用它来查找在我的数据集上重复每个#标签的次数:
db.hashtags.aggregate([{ "$group": {"_id": "$hashtag","count": { "$sum": 1 }}}]);
但是,我想将值保存在一个不同的集合中,只有唯一值及其相应的出现次数。
我该怎么做?
请尽可能提供一些信息,以便我能理解如何不仅仅是代码。 谢谢。
答案 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"
。