Отображение Spring MongoDB AggregationResults ArrayList в список <POJO> - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно вернуть List<AspectTemplate> из операции агрегирования MongoDB.

public class AspectTemplate {
  private ObjectId id;
  private String title;
  private List<String> options;
}

В репозитории Spring MongoDB я отображаю AggregationResults вот так

ProjectionOperation projectOperation = Aggregation.project()
            .and("easpects").concatArrays("iaspects").as("allaspects").andExclude("_id");
AggregationResults<AspectTemplate> aspectTemplates = this.mongoOperations.aggregate(Aggregation.newAggregation(
            matchOperation,
            lookupOperation, projectOperation
    ), COLLECTION_NAME, AspectTemplate.class);

return aspectTemplates.getMappedResults();

Необработанные результаты

enter image description here

Но aspectTemplates.getMappedResults() возвращает следующее enter image description here

enter image description here

Как мне вернуть allaspects ArrayList, видимый в необработанных результатах как List<AspectTemplate?

1 Ответ

0 голосов
/ 23 марта 2020

Вам необходимо добавить 2 дополнительных оператора в ваш конвейер и предложить изменить класс Entity.

Сущность

@Document(collection = "COLLECTION_NAME")
public class AspectTemplate {
  @Id
  private ObjectId id;
  private String title;
  private List<String> options;
}

Агрегация

ProjectionOperation projectOperation = Aggregation.project()
    .and("easpects").concatArrays("iaspects").as("allaspects")
    .andExclude("_id");
UnwindOperation unwind = Aggregation.unwind("allaspects");
ReplaceRootOperation replaceRoot = Aggregation.replaceRoot("allaspects");
AggregationResults<AspectTemplate> aspectTemplates = mongoOperations.aggregate(Aggregation.newAggregation(
            matchOperation,
            lookupOperation, projectOperation,
            unwind, replaceRoot
    ), mongoOperations.getCollectionName(AspectTemplate.class), AspectTemplate.class);

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