Sco*_*ott 11 mongodb aggregation-framework
我正在尝试获取具有不同大小的数组的记录数列表.我想得到所有记录的数组大小的分布,所以我可以建立这样的直方图:
| *
| *
documents | * *
| * * *
|_*__*__*___*__*___
2 5 6 23 47
Array Size
Run Code Online (Sandbox Code Playgroud)
所以原始文档看起来像这样:
{hubs : [{stuff:0, id:6}, {stuff:1"}, .... ]}
{hubs : [{stuff:0, id:6}]}`
Run Code Online (Sandbox Code Playgroud)
到目前为止,使用聚合框架和一些帮助,在这里我想出来的
db.sitedata.aggregate([{ $unwind:'$hubs'},
{ $group : {_id:'$_id', count:{$sum:1}}},
{ $group : {_id:'$count', count:{$sum:1}}},
{ $sort : {_id: 1}}])
Run Code Online (Sandbox Code Playgroud)
这似乎给了我想要的结果,但它不是很快.我想知道我是否可以做这样的事情,可能不需要两个组呼.这里的语法是错误的,但我想要做的是将计数值放在第一个_id字段中:
db.sitedata.aggregate([{ $unwind:'$hubs'},
{ $group : {_id:{$count:$hubs}, count:1}},
{ $sort : { _id: 1 }}])
Run Code Online (Sandbox Code Playgroud)
现在2.6已经出来了,聚合框架支持一个新的数组运算符$size
,它允许你$project
在不必放松和重新分组的情况下获得数组大小.
db.sitedata.aggregate([{ $project:{ 'count': { '$size':'$hubs'} } },
{ $group : {_id:'$count', count:{$sum:1} } },
{ $sort : { _id: 1 } } ] )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2588 次 |
最近记录: |