Как построить вложенную защиту с операторами агрегации конвейера - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь создать агрегацию с помощью 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")???

        );

Я смущен этим разделом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...