Spring Data Mon go - выполняет отчетливо, но не хочет выводить встроенные документы в результаты - PullRequest
0 голосов
/ 05 мая 2020

Я разрабатываю Spring Boot and Spring Data Mongo пример. В этом примере я хочу получить только отдельные отделы, но не хочу использовать подотделы. Какой запрос мне нужно изменить?

db.employees.distinct("departments");

Данные:

{
    "firstName" : "Laxmi",
    "lastName" : "Dekate",
    .....
    .......
    .....

    "departments" : {
        "deptCd" : "Tax",
        "deptName" : "Tax Handling Dept",
        "status" : "A",
        "subdepts" : [ 
            {
                "subdeptCd" : "1D",
                "subdeptName" : "Tax Clearning",
                "desc" : "",
                "status" : "A"
            }
        ]
    },
}

1 Ответ

1 голос
/ 05 мая 2020

Агрегирование получает различные departments.deptCd значения (плюс другие детали):

db.collection.aggregate( [
{
    $group: { _id: "$departments.deptCd", 
             deptName: { $first: "$departments.deptName" },
             status: { $first: "$departments.status" }
    }
},
{
    $project: { deptCd: "$_id", _id: 0, deptName: 1, status: 1 }
}
] )

Вывод:

{ "deptName" : "Tax Handling Dept", "status" : "A", "deptCd" : "Tax" }


[EDIT ADD]

Код с использованием Spring Data MongoDB v2.2.7:

MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "testdb");
Aggregation agg = Aggregation.newAggregation(
    Aggregation.group("departments.deptCd")
        .first("departments.deptName").as("deptName")
        .first("departments.status").as("status"),
    Aggregation.project("deptName", "status")
        .and("_id").as("deptCd")
        .andExclude("_id")
);
AggregationResults<Document> results = mongoOps.aggregate(agg, "collection", Document.class);
results.forEach(System.out::println);
...