我有这个数据模型:
{_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:1
和startDate
的元素数量大于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,但这不起作用,你有什么解决方案吗?
答案 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
数组中有多个文档时完全相同。