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

Posted

技术标签:

【中文标题】在 Mongoose 中查询多个子文档元素【英文标题】:Querying multiple sub-document elements in Mongoose 【发布时间】:2013-03-04 18:04:15 【问题描述】:

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

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,但就是无法获得它。感谢您的帮助!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

完美,谢谢。我错过了订阅者:在我尝试 $elemMatch 的第 4 行。

以上是关于在 Mongoose 中查询多个子文档元素的主要内容,如果未能解决你的问题,请参考以下文章

mongoose 文档 Population

基于多个子文档的MongoDB/Mongoose查询

MongoDB - 对时间序列子文档进行范围查询

mongoose中查询子文档的子文档

如何在 mongoose/mongodb 查询子文档中使用 mapreduce?

如何在 mongoose/mongodb 查询子文档中使用 mapreduce?