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

MongoDB聚合中实现SQL WHERE IN等效效果的$match正确用法

错误原因排查

你现有代码的问题主要有两个:

  • 语法错误:$match和$group两个聚合阶段对象之间缺少逗号分隔,运行会直接抛出语法异常
  • $in用法错误:常规字段匹配不需要用$expr,$in的标准语法是{<字段名>: {$in: <匹配值数组>}},你写的参数结构缺失了要匹配的Index字段,逻辑完全不成立。

正确实现方案

方案1:使用distinct方法(最简洁,和你的MySQL需求完全对应)

仅需要筛选后取KernelName的去重结果,直接用MongoDB内置的distinct方法即可,不需要写复杂的聚合管道:

db.table1.distinct("KernelName", {
  "Index": { $in: $DispatchIDFilter }
})

返回结果直接就是去重后的KernelName数组,不需要额外处理。

方案2:使用聚合管道实现(符合你要求的$match阶段写法)

如果后续需要在管道中扩展其他处理逻辑,正确的聚合写法如下:

db.table1.aggregate([
  {
    "$match": {
      "Index": { "$in": $DispatchIDFilter }
    }
  }, // 两个阶段之间必须加逗号分隔
  {
    "$group": {
      "_id": "$KernelName"
    }
  }
])

如果需要把返回结果里的_id字段名改为KernelName,可以追加一个$project阶段调整字段:

db.table1.aggregate([
  {
    "$match": {
      "Index": { "$in": $DispatchIDFilter }
    }
  },
  {
    "$group": {
      "_id": "$KernelName"
    }
  },
  {
    "$project": {
      "KernelName": "$_id",
      "_id": 0
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:48:01