db.students.aggregate([
{ $unwind: "$details" },
{
$group: {
_id: {
sid: "$details.student._id",
statuscode: "$details.studentStatus.statusCode"
},
total: { $sum: 1 }
}
}
]);查询工作正常,需要转换为mongo模板。
样本文件:
{
"_id" : 59,
"details" : [
{
"student" : {
"_id" : "5d3145a8523a2e602e5e0200"
},
"studentStatus" : {
"statusCode" : 1
}
}
]
}发布于 2020-01-09 04:33:02
给定聚合的Spring数据MongoTemplate代码如下所示。
请注意,我已经在小组之前添加了一个项目阶段。此项目是必需的;如果嵌套字段("details.student._id“和"details.studentStatus.statusCode")直接在组阶段使用,则存在错误"FieldPath field names may not contain '.'.",无法解决(只有在分组中使用多个字段时才会发生这种情况)。
结果与您提供的聚合结果相同。我在Java8中使用了最新的Spring和MongoDB驱动程序。
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);https://stackoverflow.com/questions/59639379
复制相似问题