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

MongoDB中如何结合$or与$cond实现按type匹配对应status的查询

错误原因

你原有写法无法运行的核心问题是 $cond 属于聚合操作符,不能直接作为find()的顶层查询条件使用,要么搭配$expr包裹聚合表达式使用,要么直接用基础逻辑运算符组合条件即可实现需求,后者性能和可读性都更高。


最优实现方案(推荐)

你的需求本质上是匹配两类符合规则的文档,直接用$or组合两类条件即可,不需要用到分支判断:

db.collection.find({
  $or: [
    // 匹配checkbox类型的合法状态
    {
      "type": "checkbox",
      "status": { $in: ["completed", "process"] }
    },
    // 匹配radio类型的合法状态
    {
      "type": "radio",
      "status": "completed"
    }
  ]
})

该写法属于MongoDB普通查询语法,可以命中你提前建立的type、status相关索引,查询性能最优。


基于$cond的实现方案

如果你确实需要用分支判断的逻辑实现,可以用$expr包裹聚合表达式后放入查询条件:

db.collection.find({
  $expr: {
    $cond: {
      if: { $eq: ["$type", "checkbox"] },
      then: { $in: ["$status", ["completed", "process"]] },
      else: { $eq: ["$status", "completed"] }
    }
  }
})

该写法属于聚合表达式查询,无法直接命中普通字段索引,非必要不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:57:01