我正在使用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次吗?有没有解决方法?
感谢
答案 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) {}
您可以获得要收听的每个对象的所有事件。
以下是一个很好的例子: