3
我在Mongo的數據庫中的以下文件(_ids跳過):Spring如何在mongo中構建它的*查詢?
> db.names.find({})
{ "name": "John" }
{ "name": "Jack" }
{ "name": "Johny" }
{ "name": "Jenny" }
我已經創造了這個系列的春數據倉庫:
public interface NameRepository extends MongoRepository<Name, ObjectId> {
Collection<Name> findByNameLike(String name);
}
結果如下:
nameRepository.findByNameLike("John"); // John, Johny
nameRepository.findByNameLike("John$"); // John
nameRepository.findByNameLike("J*ny"); // Johny, Jenny
nameRepository.findByNameLike("Jo?*ny"); // Johny, Jenny
nameRepository.findByNameLike("Jo[]]?*ny"); // empty, without error
所以它的行爲就像一個聰明的正則表達式。現在我想實現這樣的行爲我:
class MyNameRepository {
MongoOperations mongoOperations; // injected
public Collection<Name> findByName(String like) {
Query query = new Query();
query.addCriteria(Criteria.where("name").regex(like));
return mongoOperations.find(query, Name.class)
}
}
但我的方法的行爲是不同的:
myNameRepository.findByName("John"); // John, Johny
myNameRepository.findByName("John$"); // John
myNameRepository.findByName("J*ny"); // empty, without error
myNameRepository.findByName("Jo?*ny"); // error (invalid regex)
myNameRepository.findByName("Jo[]]?*ny"); // error (invalid regex)
所以我的自定義方法的工作原理完全一樣我會在春天的數據倉庫定義findByNameRegex
方法。如何實施findByNameLike
行爲?
爲什麼我需要這個:當我需要通過許多屬性(例如,按名稱,姓名,姓名和郵政編碼,姓名,郵政編碼等等)過濾我的收藏時,我更容易支持將查詢作爲參數,而不是在存儲庫中創建許多超長命名的方法。