Spring Data Mongodb - 在同一字段上使用OR子句查找查询

时间:2016-10-08 08:58:09

标签: spring mongodb spring-data

我正在使用spring数据处理mongo并使用基于属性字段的查询“findBy”。

我的目标是通过OR子句在多个属性中找到相同的值,如下所示:

List<Event> findByCreatorOrOrganizersOrGuests(User user);

此查询涉及3个属性:“创建者”,“组织者”和“来宾”是单个值(创建者)和2个列表(组织者和来宾),它们包含相同的类类型(用户)

在编译时我收到此错误:

org.springframework.data.repository.query.ParameterOutOfBoundsException: Invalid parameter index! You seem to have declare too little query method parameters!

我需要重复相同的参数3次吗?有没有解决方法?

感谢

1 个答案:

答案 0 :(得分:0)

即使使用索引定义Mongo查询列表也不会那么有效。

另一个重要的是查询:

List<Event> findByCreatorOrOrganizersOrGuests(User user);

包含一些语法错误(MongoDB期望得到3个参数作为变量int()相对于findBy键,返回值应该插入到列表对象中,我不确定查找查询中的Or是合法的语法。

作为一个概念,DB文档应该具有良好的搜索能力,因为它是最昂贵的行为。

使用OR in MongoDB查找时,直接查询应如下所示:

def events = find({$或:{{user.username:{$ lt:20}},{price:10}]})

虽然searching in a list这应该是不同的,所以请按照我附上的链接。

当我试着想到你正在寻找的用途时,我会提出一个不同的方面。如果您对这些活动感兴趣,请阅读AbstractPersistenceEventListener。通过定义适当的

void onPostInsert(entity) {}
void onPostUpdate(entity) {}
void onPostDelete(entity) {}

您可以获得要收听的每个对象的所有事件。

以下是一个很好的例子: