2

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

Group.find({ $or: [ {'groupOwner': req.user._id }, { 'subscribers.user': req.user._id, 'subscribers.level': 'owner' } ] }, 'groupName', { sort: ['groupName', 'ascending'] }, function(err, groups) {

我的架构有一个组,订阅者作为子文档数组。我想找到 groupOwner 与传递的用户 ID 匹配的所有组(工作正常),以及subscribers.user = req.user._id ANDsubscribers.level = 'owner' 的所有文档

所写的查询返回所有子文档,其中subscribers.user = req.user._id 或有一些订阅者级别='所有者'。需要明确的是,我只想要子文档具有subscribers.user = req.user._id 并且相同的子文档具有subscribers.level = 'owner' 的组。

我已经尝试了各种方式的 $and 和 $elemMatch ,但就是无法得到它。谢谢你的帮助!

4

1 回答 1

7

$elemMatch是匹配同一数组元素中的多个字段时的正确运算符;您的查询应如下所示:

Group.find(
  { $or: [ 
    { groupOwner: req.user._id }, 
    { subscribers: { $elemMatch: { user: req.user._id, level: 'owner' }}}
  ]}, 
  'groupName', 
  { sort: ['groupName', 'ascending'] }, 
  function(err, groups) { ...
于 2013-03-15T21:35:48.123 回答