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

MongoDB中如何在map函数内使用match?相关报错该如何解决

报错原因
  • $match 是聚合管道的阶段操作符,只能作为独立的管道节点使用,不能嵌套在 $project 内部的字段计算逻辑中
  • 代码存在拼写错误:遍历数组元素的系统变量正确写法是 $$this,原代码写成了 $Sthis
修复方案

提供两种可落地的写法:

方案1:最小改动修复原逻辑

仅修改$project阶段的计算逻辑,用$filter过滤符合条件的任务后统计数量,代码如下:

db.employees.aggregate([
  {
    "$lookup": {
      "from": "assignment",
      "localField": "empno",
      "foreignField": "emp_no",
      "as": "assignments"
    }
  },
  {
    $project: {
      points: {
        $size: {
          $filter: {
            input: "$assignments",
            cond: { $eq: ["$$this.progress", "Working"] }
          }
        }
      },
      empno: 1
    }
  }
])

方案2:性能优化写法

如果数据量较大,建议直接在$lookup阶段就过滤符合条件的任务,减少无效数据的拉取和处理,代码如下:

db.employees.aggregate([
  {
    "$lookup": {
      "from": "assignment",
      "localField": "empno",
      "foreignField": "emp_no",
      "pipeline": [
        { $match: { progress: "Working" } }
      ],
      "as": "working_assignments"
    }
  },
  {
    $project: {
      points: { $size: "$working_assignments" },
      empno: 1
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:09:04