Spring Data Mon go - пользовательская опция AggregtionOption не работает - PullRequest
1 голос
/ 14 апреля 2020

Я попытался создать пользовательскую операцию агрегации на основе https://github.com/krishnaiitd/learningJava/tree/master/spring-boot-sample-data-mongodb Когда я использовал пользовательскую агрегацию в своей агрегации для поиска, она вызвала исключение, сказав, что поле «как» не найдено на объекте.

Если кто-то пытался использовать пользовательский AggregationOperation, поделитесь своим кодом или сообщите мне, где я ошибаюсь.

Ниже приведен мой код,

String lookup = "{ $lookup : { from: 'ITEM', localField : 'item_id', foreignField : '_id', as : 'item' } }";
TypedAggregation<Order> aggregation = Aggregation.newAggregation(Order.class, 
        new CustomAggregationOperation(lookup),
        unwind("item", false));

Исключение:

org.springframework.data.mapping.PropertyReferenceException: No property item found for type Order!

1 Ответ

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

A TypedAggregation - это специальная агрегация, которая содержит информацию о типе входной агрегации.

https://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/aggregation/TypedAggregation.html

Это означает, что После каждого этапа Spring будет проверять, что ваши документы не изменили структуру.

Поскольку вы пытаетесь преобразовать исходный документ, вам необходимо использовать стандартный Aggregation.

Aggregation aggregation = Aggregation.newAggregation(
    new CustomAggregationOperation(lookup),
    unwind("item", false)
);

List<Order> result = mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(Order.class), Order.class).getMappedResults();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...