You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose查询问题:如何筛选无未驳回Issue的记录?

解决方案

要找出所有不存在未被驳回Issue的记录,核心是确保文档里的所有activities条目要么没issue,要么有issue但已经被驳回(dismissed字段存在)。直接用这个Mongoose查询就能实现:

collection.find({
  $not: {
    $elemMatch: {
      'issue': { $exists: true },
      'issue.dismissed': { $exists: false }
    }
  }
})

或者用$nor语法实现等价逻辑:

collection.find({
  $nor: [
    {
      $elemMatch: {
        'issue': { $exists: true },
        'issue.dismissed': { $exists: false }
      }
    }
  ]
})

之前的查询失效原因

第一个查询的问题

你之前把$not嵌套在activities:字段下,这会让MongoDB判断整个activities数组不匹配$elemMatch的条件——但数组只要有一个元素不满足该条件就会触发匹配,这和我们要的“所有元素都不能是未驳回的issue”逻辑完全相反。直接将$not放在查询最外层,才能让MongoDB检查整个文档中是否存在符合条件的activity,不存在则返回该文档。

第二个查询的问题

第二个用$or的写法是针对数组整体的,MongoDB只要发现数组里有一个元素满足activities.issue不存在,或者有一个元素的dismissed存在,就会返回整个文档。但如果文档里同时存在已驳回和未驳回的issue,这个查询还是会把它捞出来,不符合需求。

匹配范围说明

这个查询会精准匹配两类文档:

  • 所有activity都没有issue字段的文档
  • 所有activity的issue都包含dismissed(已被驳回)的文档

完全覆盖你要的“不存在未被驳回Issue”的场景。

内容的提问来源于stack exchange,提问作者frostycoles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:34:56