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

如何编写Mongo Shell查询判断多个条件中是否超一个成立?

MongoDB查询:匹配多个条件中至少两个为真的文档

核心思路

利用$expr在查询阶段嵌入聚合表达式,通过$sum统计满足条件的条目数量,再判断总数是否≥2。这种方式既支持布尔属性检查,也能适配任意自定义条件(如数值比较、字符串匹配等)。

布尔属性场景示例

针对你提供的包含布尔属性的文档结构,查询至少两个属性为true的文档:

db.applicationState.find({
  $expr: {
    $gte: [
      {
        $sum: [
          { $cond: ["$property1", 1, 0] },
          { $cond: ["$property2", 1, 0] },
          { $cond: ["$property3", 1, 0] }
        ]
      },
      2
    ]
  }
})
  • $cond将每个布尔属性转换为1(true)或0(false)
  • $sum累加所有转换后的值
  • $gte判断累加结果是否≥2,满足则返回该文档

任意自定义条件场景示例

如果需要检查的不是布尔属性,而是复杂判断条件(比如数值范围、字符串长度等),只需将$cond的第一个参数替换为对应条件即可。例如,匹配以下至少两个条件的文档:

  • propertyA大于100
  • propertyB等于"active"
  • propertyC字符串长度超过5

查询语句如下:

db.applicationState.find({
  $expr: {
    $gte: [
      {
        $sum: [
          { $cond: [{ $gt: ["$propertyA", 100] }, 1, 0] },
          { $cond: [{ $eq: ["$propertyB", "active"] }, 1, 0] },
          { $cond: [{ $gt: [{ $strLenCP: "$propertyC" }, 5] }, 1, 0] }
        ]
      },
      2
    ]
  }
})

注意事项

  • 该方案要求MongoDB版本≥3.6($expr从3.6版本开始支持)
  • 条件数量可灵活增减,只需在$sum的数组中添加或移除对应的$cond条目即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:35:00