【问题标题】:How to use match inside map function in Mongodb如何在 Mongodb 的 map 函数中使用 match
【发布时间】:2021-09-17 15:14:13
【问题描述】:

我是 Mongodb 的初学者,我想执行以下查询来查找每个员工的任务总数,任务进度为“工作”。

db.employees.aggregate([
  {
    "$lookup": {
      "from": "assignment",
      "localField": "empno",
      "foreignField": "emp_no",
      "as": "assignments"
    }
  },
  {
    $project: {
      points: {
        $sum: {
          $map: {
            input: "$assignments",
            in: { $match:{$Sthis.progress:"Working"}}
          }
        }
      },
      empno: 1
    }
  }
])

当我执行此查询时,我收到错误“无效的 $project:: 由:: Unrecognized expression '$match' 引起”。我该如何解决这个问题?

【问题讨论】:

    标签: mongodb mongoose mongodb-query


    【解决方案1】:

    将过滤器添加到地图的输入并在过滤器中设置条件

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

    【讨论】:

    • 我收到此错误“由 :: FieldPath 字段名称导致的 $project :: 无效可能不以 '$' 开头。”在 mogodbcompass 中。
    • 我更新了我的asnwer,请再试一次
    • 谢谢我再次尝试查询正常,但我的积分输出似乎为 0,尽管数据库中有“progress: Working”。你能解释一下输入字段中发生的等待吗?它可以计算字符串值吗?
    • 问题在于 sum 函数,我猜它没有正确过滤,有什么解决方案吗?因为我想得到总数。有没有办法计算点的返回元素数组?
    • 输出总和:{ _id: ObjectId("61406d010da080a2dad0dede"), empno: 10, points: 0 } { _id: ObjectId("61406d010da080a2dad0dedf"), empno: 11, points: 0 } { _id: ObjectId("61406d010da080a2dad0dee0"), empno: 12, points: 0 }
    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2011-11-08
    • 2019-02-11
    • 2018-11-25
    • 2019-02-23
    • 2015-12-28
    • 2020-09-11
    • 2013-12-26
    相关资源
    最近更新 更多