休斯顿,我有一个问题(大家好!)。
我正在使用springdata的@query注释,我需要使用一些标准执行查找查询。
假设我的集合对象是:
我的搜索条件对象是
我需要在集合中搜索符合我标准的文档。
问题是搜索条件不是强制性的,所以我可以有一些空参数(例如,有时我必须找到具有特定代码和日期的文档,有时使用特定的电子邮件等等)所以我开始谷歌搜索解决方案。
我读到了$或$和运算符(我很抱歉和重复),我试图实现一个解决方案(我知道,做或不做,没有尝试但是我对如何使它发挥作用感到非常困惑。
目前的情况是:
@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问题?
感谢。
答案 0 :(得分:1)
我知道这不是一个真正的解决方案。
MongoTemplate
课程或在您的情况下,我会使用query-dsl,因为您必须执行一次并覆盖所有存储库。 (1)
注意:为了更好一些,请不要使用com.mysema.query.apt.QuerydslAnnotationProcessor
而是使用org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor
,因为您不必使用query-dsl的@QueryEntity
;)
如果您只有一个存储库,其中有可选参数,请考虑将存储库(4)
子类化