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
相关产品推荐
相关产品推荐

