multipme记录MongoDb上的聚合数组大小

时间:2016-02-15 09:32:37

标签: mongodb

我有那些对象

{_id:1, userId:1, elements:[1,2,3]},
{_id:2, userId:2, elements:[1,2]},
{_id:3, userId:1, elements:[1,2,3,4]},

我想通过UserId获取元素数量,例如1包含7元素,2包含2元素

我试过

db.getCollection('user_elements').aggregate([
    {'$match': {userId: 1}},
    {'$project': {
        'elements': { $size: '$elements' }
    }}
]);

但在这种情况下,我的第一行包含3,第二行包含4。 有没有解决方案可以直接获得7

2 个答案:

答案 0 :(得分:1)

你可以通过$group

来完成
db.getCollection('user_elements').aggregate([
       {'$match': {userId: 1}}, 
       {$project: {elements: {$size: '$elements'}}}, 
       {$group: {_id: null, elements: {$sum: '$elements'}}}])

答案 1 :(得分:0)

db.getCollection('user_elements').aggregate([{$group:{_id:"$userId", elements:{$sum:{$size:"$elements"}}}}])

在这里,您希望在userId的基础上对元素求和。因此,在userId的基础上对其进行分组,$ size将计算数组中的元素,$ sum将对包含相同userId的记录中的所有计数求和。