【发布时间】:2015-03-25 20:22:51
【问题描述】:
所以我正在尝试使用聚合在我的数据库中生成一些统计数据
我当前的脚本如下所示:
db.posts.aggregate( [
{ $group: {_id : "$domain", "counter" : {$sum : 1}}},
{ $sort : { counter : -1}},
{ $match : { counter : {$gt : 10} } }
])
并产生如下结果:
{
"result" : [
{
"_id" : "i.imgur.com",
"counter" : 1220
},
{
"_id" : "imgur.com",
"counter" : 459
}
],
"ok" : 1
}
相当满意,但我想更进一步。我正在使用 robomongo(对我来说更舒服),这对我来说就像单个文档:
我希望每个结果都成为一个单独的文档,如下所示:
| _id | counter
---+-------------+--------
1 | i.imgur.com | 1220
---+-------------+--------
2 | imgur.com | 459
我以为我需要使用 $unwind,但惨遭失败:将 { $unwind : "$result"} 添加到聚合链会产生以下输出:
/* 0 */
{
"result" : [],
"ok" : 1
}
我做错了什么以及如何做对?
【问题讨论】:
-
首先,您是否在单个数组中获得了您想要的所有结果?其次,如果是格式问题,那么最好手动编写代码。
-
$project 应该可以解决问题。您能否提供结果的示例 JSON 对象?
-
顺便说一下,
$match在管道中的位置越高越好。尽管在使用小数据集时可能不会注意到性能上的真正差异,但为了获得最佳实践,最好将顺序切换为$group、$match、$sort。 -
@AshwinBalamohan 是的,这里是:pastebin.com/1kWp4zKY
标签: mongodb aggregation-framework