2015-06-25 91 views
1

我用户Spring Data,并将按名字,姓氏,电子邮件或用户名搜索条目。我必须设置参数四次还是只能设置一次参数? 谢谢!Spring数据存储库MongoDB

userRepository.findUsersByFirstnameOrSurnameOrEmailOrUsername("Mustermann", "Mustermann", 
     "Mustermann", "Mustermann"); 

回答

1

如果你想自动从方法名生成的查询,那么,你就必须要通过4个参数,如果所有的人都可以在某些情况下,相同的值,相同的值将有要通过4次。

但是,如果您愿意权衡易于传递参数的自动查询生成功能,则可以使用@Query注释生成您自己的查询。此注释将采取任何有效的MongoDB查询,以便为您的情况下,MongoDB的查询将是:寻求帮助

@Query("$or : [{'firstName' : ?1}, {'surname' : ?1}, {'email' : ?1}, {'userName' : ?1}]") 
List<User> findUsersByFirstnameOrSurnameOrEmailOrUsername(String keyword); 
+0

非常感谢:

> db.user.find({ $or : [{"firstName" : "Mustermann"}, {"surname" : "Mustermann"}, {"email" : "Mustermann"}, {"userName" : "Mustermann"}] }); 

可以因此编写查询作为!一个小的更正 - 索引从0开始。谢谢 – quma

+0

我会对这个查询有一个问题。我想要一个“like”语句:** @ Query(“{$ or:[{'firstname':?0},{'surname':?0},{'email':?0},{ '用户名':?0}]}“)** - 例如名字不应该是名字,也可以是名字的一个片段 – quma

+0

MongoDB支持所谓的[文本搜索](http://docs.mongodb.org/manual/reference/operator/query/text/#op._S_text )。对于您想要执行LIKE查询的字段,您可以应用['@ TextIndexed'](http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/# mongodb.repositories.queries.full-text)注解在实体类中,如:@TextIndexed private String firstName;等等。然后,您只需发出MongoDB查询'@Query(“$ text:{$ search:?0}}”)'。然后,MongoDB将对用@ @ TextIndexed注释的所有字段执行全文搜索。 – manish