我有一组具有数组值(!)状态属性的用户。
我可以轻松找到锁定的用户
db.users.find({'state' : 'locked'})
因为条件“调查”状态数组。
但是,我需要在聚合框架的上下文中,我无法让它工作。这是我的一次非工作尝试:
db.users.aggregate({
'$group' : {
'_id' : { '$cond' : [{'$eq' : ['$state', 'locked']},
'locked',
'not_locked']
},
'count' : { '$sum' : 1 }
}
})
IOW,我想根据状态数组中的元素存在生成一个组_id。
答案 0 :(得分:0)
我假设你想要一份关于状态的每个可能元素的文档,并计算他们拥有状态的每个组中的原始文档......
您可以先执行$ unwind来拆分文档/状态组合。然后将州合并在一起。
如果状态可以重复,则可能有点棘手(展开,组ID /状态,组状态+计数)
答案 1 :(得分:0)
从3.2版开始,有一种简单的方法
...aggregate([
{
$addFields: {
arrayFilter: {
$filter: {
input: '$someArray',
as: 'item',
cond: ['$$item', 'locked']
}
}
}
},
{
$unwind: '$arrayFilter'
},
{
$project: {
arrayFilter: 0
}
}
]);