Express вложенное поле в агрегате Spring Data MongoDB $ project - PullRequest
0 голосов
/ 20 апреля 2020

Этот запрос генерирует объект с ключом / значением внутри, работает как я ожидаю

db.empdetails.aggregate( [ { $project: { reportInformationMap: { valu1: 1 } } } ] );

Так что в данных Spring я делаю:

Aggregation.project("reportInformationMap.valu1")

Данные Spring генерируют что-то вроде этого:

{ "aggregate" : "__collection__" , "pipeline" : [ { "$project" : {  "valu1" : "$reportInformationMap.valu1"}}

это работает, но дай мне valu1 как root значение. Мне нужно это как значение гнезда reportInformationMap.

1 Ответ

1 голос
/ 20 апреля 2020

Для этого необходимо использовать метод ProjectionOperation.ProjectionOperationBuilder.nested (nested определяет привязку вложенного поля к полю):

Вот пример со следующим входным документом:

{ "name" : { "first" : "John", "last" : "Doe" } }

Код:

ProjectionOperation projection = Aggregation.project().and("name").nested(Fields.fields("name.first"))

Aggregation agg = newAggregation(projection);
AggregationResults<Document> results = mongoTemplate.aggregate(agg, "test", Document.class);
results.forEach(doc -> System.out.println(doc.toJson()));

Выход (прогнозируемый):

{ "name": {"first": "John"} }
...