我有一个集合,集合中的每个文档都有一个名为foo包含一组嵌入文档的数组.MongoDB shell中目前有一种简单的方法来计算其中有多少个实例foo?就像是:
db.mycollection.foos.count()还是db.mycollection.foos.size()?
数组中的每个文档都需要具有唯一性foo_id,我想快速计算以确保在集合中的适当随机文档的数组中包含适量的元素.
Ste*_*nie 44
在MongoDB 2.6中,Aggregation Framework有一个$size可以使用的新数组运算符:
> db.mycollection.insert({'foo':[1,2,3,4]})
> db.mycollection.insert({'foo':[5,6,7]})
> db.mycollection.aggregate({$project: { count: { $size:"$foo" }}})
{ "_id" : ObjectId("5314b5c360477752b449eedf"), "count" : 4 }
{ "_id" : ObjectId("5314b5c860477752b449eee0"), "count" : 3 }
Run Code Online (Sandbox Code Playgroud)
xle*_*ras 21
如果您使用的是最新版本的mongo(2.2及更高版本),则可以使用聚合框架.
db.mycollection.aggregate([
{$unwind: '$foo'},
{$group: {_id: '$_id', 'sum': { $sum: 1}}},
{$group: {_id: null, total_sum: {'$sum': '$sum'}}}
])
Run Code Online (Sandbox Code Playgroud)
这将为foo您提供收藏的总数.
省略最后一个group将汇总每条记录的结果.
使用投影和组
db.mycollection.aggregate(
[
{
$project: {
_id:0,
foo_count:{$size:"$foo"},
}
},
{
$group: {
foo_total:{$sum:"$foo_count"},
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
多个子数组计数也可以这样计算
db.mycollection.aggregate(
[
{
$project: {
_id:0,
foo1_count:{$size:"$foo1"},
foo2_count:{$size:"$foo2"},
}
},
{
$group: {
foo1_total:{$sum:"$foo1_count"},
foo2_total:{$sum:"$foo2_count"},
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48350 次 |
| 最近记录: |