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

MongoDB聚合查询:实现OR条件匹配并返回匹配次数

实现OR条件匹配并统计命中数量的聚合查询

这个需求挺实用的——既要通过OR条件筛选文档,还要统计每条文档命中了几个条件对吧?我来给你捋捋怎么用MongoDB的聚合管道实现:

首先得明确你要匹配的三个OR条件是:

  • A = 1
  • A = 3
  • c = "test"

接下来可以用聚合管道分两步实现,先筛选符合条件的文档,再统计命中数:

完整聚合查询代码

db.yourCollectionName.aggregate([
  // 第一步:先过滤出至少匹配一个OR条件的文档,减少后续计算量
  {
    $match: {
      $or: [
        { A: 1 },
        { A: 3 },
        { c: "test" }
      ]
    }
  },
  // 第二步:添加count字段,统计命中的条件数量
  {
    $addFields: {
      count: {
        $sum: [
          // 判断是否命中A=1,满足记1,不满足记0
          { $cond: [{ $eq: ["$A", 1] }, 1, 0] },
          // 判断是否命中A=3
          { $cond: [{ $eq: ["$A", 3] }, 1, 0] },
          // 判断是否命中c=test
          { $cond: [{ $eq: ["$c", "test"] }, 1, 0] }
        ]
      }
    }
  }
])

代码逻辑解释

  1. $match阶段:用$or把三个条件组合起来,只保留至少满足一个条件的文档,避免对无关文档做统计,能有效提升查询效率。
  2. $addFields阶段:
    • 用$cond逐个判断每个条件是否满足,满足返回1,不满足返回0;
    • 最后用$sum把这三个判断结果相加,得到这条文档命中的条件总数,存到新增的count字段里。

测试结果验证

用你提供的示例文档执行这个查询,会得到完全符合你期望的结果:

[
  { "A": 1, "B": 2, "c": "x", "count": 1 }, // 仅命中A=1条件
  { "A": 3, "B": 2, "c": "play", "count": 1 }, // 仅命中A=3条件
  { "A": 1, "B": 2, "c": "test", "count": 2 } // 命中A=1和c=test两个条件
]

如果后续需要调整查询条件,只需要修改$match里的$or数组,以及$sum里对应的$cond判断即可,灵活性拉满~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:05:15