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

带默认参数匹配规则的MongoDB find()查询实现问题

实现方案

你需要的按优先级匹配的逻辑(同zip下优先匹配指定service,无匹配则取同zip的service=default条目,均无匹配则返回空)无法通过基础find()实现,需使用聚合查询完成,具体逻辑和代码如下:

查询逻辑

  1. 先筛选出所有zip等于目标值,且service为「目标service」或default的文档,缩小检索范围
  2. 给筛选后的文档设置排序权重:精确匹配目标service的权重为2,匹配default的权重为1
  3. 按权重降序排序,精确匹配的结果会排在最前
  4. 取排序后的第一条结果,即为符合要求的返回值

代码示例(以查询zip=94583、service="CPS"为例)

db.collection.aggregate([
  {
    $match: {
      zip: "94583",
      $or: [
        { service: "CPS" },
        { service: "default" }
      ]
    }
  },
  {
    $addFields: {
      sortWeight: {
        $cond: {
          if: { $eq: [ "$service", "CPS" ] },
          then: 2,
          else: 1
        }
      }
    }
  },
  { $sort: { sortWeight: -1 } },
  { $limit: 1 },
  { $unset: "sortWeight" } // 可选:移除临时生成的权重字段
])

规则匹配验证

  • 当查询zip=94583、service="CPS"时,精确匹配的文档权重更高,会优先返回对应结果,符合要求1
  • 当查询zip=94583、service="other"时,无精确匹配结果,会返回同zip的default条目,符合要求2
  • 当查询zip=92021、service="ABC"时,同zip下仅存在default条目,直接返回对应结果,符合要求3
  • 当查询zip=02135、service="CDF"时,第一步筛选无匹配文档,直接返回空,符合要求4
  • 当查询zip=12345、service="BCD"时,同zip下既无对应service的文档也无default条目,筛选无结果返回空,符合要求5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:45:01