使用条件MongoDB计算嵌套元素

时间:2016-02-15 12:05:12

标签: mongodb

我有这个数据模型:

{_id: 1, userId: 1, elements: [{type:'a', startDate: 2015-10-10 20:00:00}]},
{_id: 2, userId: 2, elements: [{type:'b', startDate: 2016-10-10 20:00:00}]},
{_id: 3, userId: 1, elements: [{type:'c', startDate: 2016-10-10 20:00:00}]},
{_id: 4, userId: 1, elements: [{type:'a', startDate: 2016-10-10 20:00:00}]}

我想计算startDate条件的用户的所有元素。

例如计算userId:1startDate的元素数量大于2016-10-09 20:00:00

我试过

db.collection.aggregate([
    {'$match': {userId: 1}},
    {$group: {_id: null, elements: {$sum: {
        "$cond": [
                { $gte : ['$elements.startDate', new ISODate("2016-10-09T20:00:00Z")] },
                1,
                0
            ]
        }
    }}}
]);

结果应为2,但这不起作用,你有什么解决方案吗?

1 个答案:

答案 0 :(得分:1)

您需要先unwind elements

db.collection.aggregate([
    {'$match': {userId: 1}},
    {$unwind: "$elements"},
    {$group: {_id: null, elements: {$sum: {
        "$cond": [
                { $gte : ['$elements.startDate', new ISODate("2016-10-09T20:00:00Z")] },
                1,
                0
            ]
        }
    }}}
]); 

作为旁注,请确保sum内容与elements数组中有多个文档时完全相同。