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

MongoDB聚合按入参数组过滤字段 排除空匹配结果方法

MongoDB聚合查询修正方案

现有语句问题点

  • 参数嵌套错误:你将传入的charger数组额外包裹了一层方括号,导致匹配时使用的是二维数组,$in判断逻辑不符合预期
  • 缺少空文档过滤:数组过滤完成后没有剔除chance为空的无效文档
  • 缺少结构重塑步骤:没有将匹配到的数组项拆分为平铺结构,和期望输出格式不匹配
  • 入参存在笔误:Postman传入的参数中"symbol,"多了尾部逗号,会导致字符串匹配失败

修正后完整聚合代码

db.collection.aggregate([
  {
    // 第一步:过滤chance数组中匹配inked值的项
    $project: {
      chance: {
        $filter: {
          input: "$chance",
          as: "c",
          cond: {
            $in: ["$$c.inked", charger] // 直接引用传入的charger数组,无需额外套数组
          }
        }
      }
    }
  },
  {
    // 第二步:剔除过滤后chance数组为空的文档
    $match: {
      "chance.0": { $exists: true }
    }
  },
  {
    // 第三步:拆分chance数组,将每个匹配项转为独立文档
    $unwind: "$chance"
  },
  {
    // 第四步:输出期望的字段结构
    $project: {
      _id: 0,
      id: "$_id",
      inked: "$chance.inked",
      aim: "$chance.aim"
    }
  }
])

补充说明

  • 先修正Postman入参的笔误,将"symbol,"改为"symbol",保证字符串完全匹配
  • 空数组过滤阶段也可以用$expr: { $gt: [ { $size: "$chance" }, 0 ] }替换"chance.0": { $exists: true },效果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:27:20