2015-06-25 92 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