【发布时间】:2019-05-13 17:30:10
【问题描述】:
如果参数为空 - 获取所有对象,如果参数不为空 - 获取带参数的对象。 我有疑问:
@Query("{$and : [{$or : [ { $where: '?0 == null' } , { topic : ?0 }]}] }")
List<Event> find(Topic topic);
在我使用 topic = Topic.SPORT 运行方法时,我得到:
抛出异常[请求处理失败;嵌套异常是 org.springframework.data.mongodb.UncategorizedMongoDbException:查询 失败,错误代码 16722 和错误消息“ReferenceError: SPORT 在服务器 localhost:27017 上未定义;嵌套异常是 com.mongodb.MongoQueryException:查询失败,错误代码 16722 和服务器上的错误消息“ReferenceError:SPORT 未定义” localhost:27017] 根本原因
但是如果我用 topic = null 运行这个方法,我会得到所有对象(这是真的)
我重构了这个方法,如下图:
@Query("{$and : [{$or : [ { $where: '\"?0\" == null' } , { topic : ?0 }]}] }")
List<Event> find(Topic topic);
我可以使用参数 topic = Topic.SPORT 获取对象,但我无法获取 topic = null 的所有对象,我得到的是空列表。 我该如何解决这个问题?
【问题讨论】:
-
我相信您需要在
{ topic : ?0 }中的?0 周围加上引号 -
@Bajal 如果 topic = null,我想让 List
独立于主题(这是我的参数) -
默认情况下,mongorepository 使用 所以可以去掉第一个$and
标签: mongodb spring-data spring-data-mongodb