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

MongoDB如何让$or条件优先执行首个查询,无结果再执行第二个?

实现方法

可以通过MongoDB的聚合管道实现这种优先级查询,无需发起两次请求,具体方案如下:

核心思路

给匹配不同条件的文档赋予优先级分数,让符合第一个条件的文档分数更高,再通过排序+取第一条的方式,实现「优先匹配第一个条件,无结果则匹配第二个」的效果。

具体聚合查询代码

db.collection.aggregate([
  // 给匹配条件的文档添加优先级分数
  {
    $addFields: {
      priority: {
        $cond: [
          { $eq: ["$keyword", "pocket hole drill bit"] },
          2, // 第一个条件匹配,设最高优先级分数
          {
            $cond: [
              { $in: ["03", "$price"] },
              1, // 第二个条件匹配,设次优先级分数
              0 // 都不匹配,分数设为0
            ]
          }
        ]
      }
    }
  },
  // 过滤掉不匹配任何条件的文档
  { $match: { priority: { $gt: 0 } } },
  // 按优先级分数降序排序,确保高优先级文档在前
  { $sort: { priority: -1 } },
  // 只取第一个结果
  { $limit: 1 }
])

效果验证

针对你提供的示例文档:

  • 匹配keyword条件的文档会被赋予priority:2,排在最前面,最终返回该文档;
  • 如果数据库中不存在匹配keyword的文档,那么匹配price条件的文档(priority:1)会被选中返回。

这个方案通过一次聚合查询就实现了和你给出的JSfind逻辑完全一致的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:35:17