java Springdata:mongodb查找查询,带有可选的“标准”
休斯顿,我有个问题(大家好!)
我正在使用springdata的@query注释,我需要使用一些标准执行一个查找查询
假设我的收藏对象是:
- 密码
- 日期
- 钥匙
- 帐户{email,firstname,lastname}
- 地位
我的搜索条件对象是
- 密码
- 日期
- 钥匙
- 电邮
- 地位
我需要在收藏中搜索符合我条件的文档
问题是搜索条件不是强制性的,所以我可以有一些空参数(例如,有时我必须查找带有特定代码和日期的文档,有时带有特定电子邮件等),所以我开始用谷歌搜索解决方案
我读过关于$or和$and操作符的文章(很抱歉重复和重复),我试图实现一个解决方案(我知道,做或不做,没有尝试),但我对如何让它工作感到非常困惑
目前的情况是:
@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);
(一开始我还尝试了$and operator)
但结果并不是我所期望的
我做错了什么,还是只是springdata的问题
谢谢
# 1 楼答案
我知道这不是一个真正的解决方案
MongoTemplate
类或在您的情况下,我将使用查询dsl,因为您必须执行一次,并覆盖所有存储库。(1)
注意:为了让它更好一点,不要使用
com.mysema.query.apt.QuerydslAnnotationProcessor
,而是使用org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor
,因为您不必使用查询dsl的@QueryEntity
;)如果你只有一个存储库,在那里你有可选的参数,考虑子库(4)
的子类。