首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MongoDB中使用MongoTemplate应用group嵌套文档?

问如何在MongoDB中使用MongoTemplate应用group嵌套文档?
EN

Stack Overflow用户
提问于 2020-01-08 04:18:29
回答 1查看 832关注 0票数 1
代码语言:javascript
复制
db.students.aggregate([
  { $unwind: "$details" },
  {
    $group: {
      _id: {
        sid: "$details.student._id",
        statuscode: "$details.studentStatus.statusCode"
      },
      total: { $sum: 1 }
    }
  }
]);

查询工作正常,需要转换为mongo模板。

样本文件:

代码语言:javascript
复制
{
        "_id" : 59,
        "details" : [
                {
                        "student" : {
                                "_id" : "5d3145a8523a2e602e5e0200"
                        },
                        "studentStatus" : {
                                "statusCode" : 1
                        }
                }
        ]
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-09 04:33:02

给定聚合的Spring数据MongoTemplate代码如下所示。

请注意,我已经在小组之前添加了一个项目阶段。此项目是必需的;如果嵌套字段("details.student._id“和"details.studentStatus.statusCode")直接在组阶段使用,则存在错误"FieldPath field names may not contain '.'.",无法解决(只有在分组中使用多个字段时才会发生这种情况)。

结果与您提供的聚合结果相同。我在Java8中使用了最新的Spring和MongoDB驱动程序。

代码语言:javascript
复制
MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "spr_test");

Aggregation agg = newAggregation(
                                unwind("details"),    
                                project("_id")
                                    .and("details.student._id").as("sid")
                                    .and("details.studentStatus.statusCode").as("statuscode"),
                                group("sid", "statuscode")
                                    .count().as("total")
);

AggregationResults<Document> aggResults = mongoOps.aggregate(agg, "students", Document.class);
aggResults.forEach(System.out::println);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59639379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档