首页 > 解决方案 > 如何使用 mongoTemplate 将 Mongo cli 命令转换为 spring-data-mongo 命令以进行 mongo 聚合

问题描述

我想使用 mongo 模板编写以下查询。

db.collection.aggregate([
  {
    $project: {
      classes: {
        $map: {
          input: "$classes",
          as: "class",
          in: {
            classId: "$$class.classId",
            students: {
              $filter: {
                input: "$students",
                cond: { $in: ["$$this._id", "$$class.studentIds"] }
              }
            }
          }
        }
      }
    }
  }
])

我已经尝试了很多,但它不起作用。

TypedAggregation<OrderDocument> aggregate = newAggregation(StudentDocument.class, 
                    match(Criteria.where("_id").is(id)),                    
                    project("classes")
                        .and(VariableOperators.Map
                                .itemsOf("classes")
                                .as("class")
                                .andApply(doc-> 
                                    new Document()
                                        .append("classId", "$$class.classId")                                       
                                        .append("students", ArrayOperators.Filter
                                                .filter("students")
                                                .as("student")           
 .by(ComparisonOperators.Eq.valueOf("$$student._id").equalToValue("$$class.studentIds"))))));
        

这没有给出来自 mongo shell 命令的所需响应。

标签: spring-bootmongodb-queryspring-data-mongodbmongo-shellmongotemplate

解决方案


推荐阅读