Я пытаюсь создать агрегацию с помощью spring-data-mongodb, но у меня есть несколько вопросов по поводу 'проекта', я не знаю, как преобразовать оболочку mongo в код Java.
Я использую spring-data-mongodb-2.1.4.RELEASE пакеты
{
"_id" : ObjectId("5ceccfbebd839e0e606e2d28"),
"deptId" : "103",
"deptName" : "deptA",
"pId" : "1",
"pIds" : [
"1"
],
"history" : {
"201905" : {
"createInfoStaffNum" : 12.0,
"goldInfoStaffNum" : 1.0,
"receiveClueNum" : 12.0,
"usefulClueNum" : 4.0,
"dealingDubanNum" : 5.0,
"receiveDubanNum" : 12.0,
"additionalScore" : 12.3
}
},
"level" : NumberInt(1),
"juzhiDepartment" : false,
"_class" : "com.gzjp.core.base.vo.document.DeptStatisticsDocument"
}
{
"_id" : ObjectId("5ceccfbebd839e0e606e2cb0"),
"deptId" : "104",
"deptName" : "deptB",
"pId" : "103",
"pIds" : [
"1",
"103"
],
"level" : NumberInt(2),
"juzhiDepartment" : false,
"history" : {
"201905" : {
"createInfoStaffNum" : 23.0,
"goldInfoStaffNum" : 1.0,
"receiveClueNum" : 12.0,
"usefulClueNum" : 4.0,
"dealingDubanNum" : 5.0,
"receiveDubanNum" : 12.0,
"additionalScore" : 12.3
}
},
"_class" : "com.gzjp.core.base.vo.document.DeptStatisticsDocument"
}
это структура данных коллекции, есть ссылки на мой тип данных Структуры дерева моделей с массивом предков
db.getCollection("auditScore").aggregate(
[
{
"$match" : {
"level" : 1.0,
"juzhiDepartment" : false
}
},
{
"$graphLookup" : {
"from" : "auditScore",
"startWith" : "$deptId",
"connectFromField" : "deptId",
"connectToField" : "pIds",
"depthField" : "level",
"as" : "children"
}
},
{
"$project" : {
"deptId" : 1.0,
"deptName" : 1.0,
"pId" : 1.0,
"pIds" : 1.0,
"_class" : 1.0,
"childNames" : "$children",
"statistics" : {
"createInfoStaffNum" : {
"$ifNull" : [
{
"$add" : [
{
"$sum" : "$children.history.201905.createInfoStaffNum"
},
"$history.201905.createInfoStaffNum"
]
},
0.0
]
}
}
}
}
],
{
"allowDiskUse" : false
}
);
это мой код оболочки монго, но я не знаю, как преобразовать его в код Java, особенно в «статистике».
TypedAggregation<DeptStatisticsDocument> aggregation = newAggregation(DeptStatisticsDocument.class,
match(Criteria.where("level").is(1).and("juzhiDepartment")),
graphLookup(collectionName)
.startWith("$deptId")
.connectFrom("deptId")
.connectTo("pIds")
.depthField("level")
.as("children"),
project("deptId", "deptName", "pId", "pIds", "level", "juzhiDepartment")
.and("statistics")???
);
Я смущен этим разделом.