我有那些对象
{_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
?
答案 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的记录中的所有计数求和。