【问题标题】:MongoDb aggregation for filtering list based on ids and mapping this filtered list to another fieldMongoDb 聚合基于 ids 过滤列表并将此过滤列表映射到另一个字段
【发布时间】:2020-12-27 05:26:24
【问题描述】:

在我的 mongodb 中,我的数据如下所示:

{
  "classes": [
    {
      "classId": "SSC",
      "studentIds": [
        "1"
      ]
    },
    {
      "classId": "HSC",
      "studentIds": [
        "2",
        "3"
      ]
    }
  ],
  "students": [
    {
      "_id": "1",
      "student": {}
    },
    {
      "_id": "2",
      "student": {}
    },
    {
      "_id": "3",
      "student": {}
    }
  ], 
}

我想要一个聚合查询,它返回如下所示的数据:

"classes": [
    {
      "classId":"SSC",
      "students": [
        {
          "id": "1",
          "student": {}
        }
      ]
    },
    {
      "classId":"HSC",
      "students": [
        {
          "id": "2",
          "student": {},
        },
        {
          "id": "3",
          "student": {}
        }
      ]
    }
  ]

在此我有 id 列表。它应该过滤该 id 的学生列表并获取该对象并将该对象放入类数组中。

我已经尝试使用 mongodb 聚合来解决这个问题。但不幸的是,我无法为此编写查询。那么我们可以使用聚合来实现上述场景吗?

我正在使用 Spring Boot mongoTemplate。

【问题讨论】:

    标签: java mongodb spring-boot mongodb-query aggregation


    【解决方案1】:

    你可以使用$map$filter

    • $map 输入classes 数组创建学生字段并在学生数组中执行$filter 并检查数组中的条件ID
    db.collection.aggregate([
      {
        $project: {
          classes: {
            $map: {
              input: "$classes",
              as: "c",
              in: {
                classId: "$$c.classId",
                students: {
                  $filter: {
                    input: "$students",
                    cond: { $in: ["$$this._id", "$$c.studentIds"] }
                  }
                }
              }
            }
          }
        }
      }
    ])
    

    Playground

    【讨论】:

    • 如何使用 MongoTemplate 编写此查询
    • 你的意思是spring mongo模板?如果是,那么我不知道 java spring。
    • 你能帮我解决链接中的聚合查询吗:stackoverflow.com/questions/64158838/…
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2020-04-14
    • 2023-02-22
    • 2020-11-17
    • 2020-06-22
    • 2020-04-05
    • 2016-09-27
    • 2016-07-14
    相关资源
    最近更新 更多