我似乎无法使用以下查询:
Group.find({ $or: [ {'groupOwner': req.user._id }, { 'subscribers.user': req.user._id, 'subscribers.level': 'owner' } ] }, 'groupName', { sort: ['groupName', 'ascending'] }, function(err, groups) {
我的架构有一个Group,订阅者作为子文档数组。我想找到groupOwner与传递的用户ID匹配的所有组(工作正常),以及subscriber.user = req.user._id AND subscribers.level ='owner'
的所有文档写入的查询返回subscriber.user = req.user._id的所有子文档或者有一些level ='owner'的订阅者。为了清楚起见,我只想要子文档中有subscriber.user = req.user._id的组和相同的子文档有subscriber.level ='owner'。
我已经尝试了各种各样的$和$ elemMatch并且无法得到它。谢谢你的帮助!
答案 0 :(得分:7)
$elemMatch
是正确的运算符;您的查询应如下所示:
Group.find(
{ $or: [
{ groupOwner: req.user._id },
{ subscribers: { $elemMatch: { user: req.user._id, level: 'owner' }}}
]},
'groupName',
{ sort: ['groupName', 'ascending'] },
function(err, groups) { ...