Spring Boot + Webflux + Reactive MongoDB - получить документ по идентификатору свойства - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы найти все документы предложения по Offer.ProductProperties.brand:

@Document(collection = "offers")
public class Offer {

    @Id
    private String id;

    @NotNull
    @DBRef
    private ProductProperties properties;

ProductProperties:

@Document(collection = "product_properties")
public class ProductProperties {
    @Id
    private String id;

    @NotNull
    @NotEmpty
    private String brand;

Услуга:

Flux<ProductProperties> all = productPropertiesRepository.findAllByBrand(brand);
        List<String> productPropIds = all.toStream()
                .map(ProductProperties::getId)
                .collect(Collectors.toList());
        Flux<Offer> byProperties = offerRepository.findAllByProperties_Id(productPropIds);

Но к сожалению byProperties пуст. Почему?

Мой репозиторий:

public interface OfferRepository extends ReactiveMongoRepository<Offer, String> {

    Flux<Offer> findAllByProperties_Id(List<String> productPropertiesIds);
}

Как найти все предложения по ProductProperties.brand?

Спасибо!

1 Ответ

1 голос
/ 30 сентября 2019

После прочтения некоторой документации выяснилось, что вы не можете запросить с помощью @DBRef. Отсюда и сообщение

Недопустимая ссылка на путь properties.brand! На ассоциации можно указывать только напрямую или через их свойство id

Если вы удалите DBRef из поля, вы сможете запросить по findAllByProperties_BrandAndProperties_Capacity.

Так что единственные способыкак у тебя дела. то есть выборка id и запрос по id.
Как я уже сказал в комментарии, причина, по которой он не работает, заключается в том, что тип возвращаемого значения findAllByProperties_Id - Flux. Поэтому, если вы не выполните терминальную операцию, у вас не будет никакого результата. Попробуйте

 byProperties.collectList().block()
...