查询Mongoose中的多个子文档元素

时间:2013-03-15 21:24:00

标签: node.js mongodb mongoose

我似乎无法使用以下查询:

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并且无法得到它。谢谢你的帮助!

1 个答案:

答案 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) { ...