Zlo*_*niy 4 mongodb mongodb-query aggregation-framework
我有一个mongo推文集,每个文档看起来像这样:
{ _id:'1234567',
date:'9/27/08 3:21',
tweet:'Some text here and some #hashtag and one more #hashtag2',
a_name:'name',
a_nick:'nick',
hashtags:['#hashtag' , '#hashtag2' ]}
Run Code Online (Sandbox Code Playgroud)
我需要使用聚合计算所有条目中#hashtag和#hashtag2的所有出现次数.到目前为止,我有这样的事情:
db.tweets.aggregate(
{ $project: { hashtags:1}},
{ $unwind: "$hashtags" },
{ $group: { _id: "hashtags", count: { $sum: 1 }}}
);
Run Code Online (Sandbox Code Playgroud)
但是这给我带来了所有主题标签的数量.如果我删除该$group行,我会得到一个包含所有单独哈希标记的列表,这很好,但我希望能够$aggregation仅使用和mongo 计算它们.有任何想法吗?
Nei*_*unn 12
我认为你可能只是输入错误或其他误解:
db.tweets.aggregate([
{ "$project": { "hashtags":1 }},
{ "$unwind": "$hashtags" },
{ "$group": { "_id": "$hashtags", "count": { "$sum": 1 } }}
])
Run Code Online (Sandbox Code Playgroud)
因此,_id组中的值需要"$hashtags"而不是"hashtags"您使用的值.这是因为它使用字段的实际值,结果是每个"#标签"的计数.
如果没有$声明你想要字段的值,它只是一个字符串.因此,对不匹配的字符串进行分组会将所有内容分组.
这样就可以为每个标签提供计数.实际上,如果您没有列出每个标签,那么您正在查找"唯一"标签的总数.你可以像这样修改:
db.tweets.aggregate([
{ "$project": { "hashtags":1 }},
{ "$unwind": "$hashtags" },
{ "$group": { "_id": "$hashtags" }},
{ "$group": { "_id": null, "count": { "$sum": 1 } }
])
Run Code Online (Sandbox Code Playgroud)
所以这只是总结.还有另一种方法可以使用$addToSet运算符来完成此操作,但它实际上只是在管道中创建了额外的工作,并不是该运算符的最佳用例.但仅供参考:
db.tweets.aggregate([
{ "$project": { "hashtags":1 }},
{ "$unwind": "$hashtags" },
{ "$group": {
"_id": null,
"hashtags": { "$addToSet": "$hashtags" }
}},
{ "$unwind": "$hashtags" },
{ "$group": { "_id": null, "count": { "$sum": 1 } }
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2616 次 |
| 最近记录: |