Хьюстон, у меня проблема (привет всем!).
Я использую аннотацию springdata @query, и мне нужно выполнить запрос поиска с некоторыми критериями.
Предполагая, что мой объект коллекции похож:
и мой объект критериев поиска
Мне нужно искать в коллекции документ, соответствующий моим критериям.
Проблема заключается в том, что критерии поиска не являются обязательными, поэтому я могу иметь некоторые нулевые параметры (например, иногда мне приходится искать документ с конкретным кодом и датой, иногда с определенным электронным письмом и т.д.), Поэтому я начал googling для решения.
Я читал о $ или и $ и операторе (я сожалею о повторении и повторении), я пытался реализовать решение (знаю, делаю или нет, нет попытки), но я очень смущен тем, как заставить его работать.
Текущая ситуация:
@Query(value = "{date: { $exists: false }, key: ?0 , $or : [{$or : [{$where: '?1==null'}, {code : ?1}]},{$or : [{$where: '?2==null'}, {status : ?2}]}]}")
public Page<Notification> findByNotificationCriteria(Pageable page, String key, String code, String status);
(я попробовал также с $ и оператором в начале)
но результаты не то, что я ожидаю.
Я делаю что-то неправильно или это просто проблема springdata?
Благодарю.
Я знаю, что это не настоящее решение.
MongoTemplate
напрямую ORВ вашем случае я бы пошел с query-dsl, так как вам нужно сделать это один раз и охватить все репозитории. (1)
Примечание. Чтобы сделать это немного лучше, не используйте com.mysema.query.apt.QuerydslAnnotationProcessor
вместо этого используйте org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor
для которого вам не нужно использовать query-dsl @QueryEntity
;)
Если у вас есть только один репозиторий, где у вас есть дополнительные параметры, рассмотрите подкласс хранилища (4)