如何查询 Mongo 存储库中的给定参数
How to query upon the given parameters in Mongo repository
我有一个 mongo 存储库查询,如下所示,如果我们同时提供名称和价格,它会给出响应。如果我们只提供名称或价格或两者,我想得到回应。如何使这些参数可选。如果我们同时提供名称和价格,我想检索聚合结果,除非我只想从给定的字段中搜索。非常感谢你的帮助。
List<Response> findByNameAndPrice(String name, int price)
在这种情况下,您可能需要实现自定义 JPA 查询或需要使用 QueryDSL。
1) 自定义 JPA 查询,如果您想添加新的可选参数,您可能需要更改查询。
@Query(value = "{$or:[{name: ?0}, {?0: null}], $or:[{price: ?1}, {?1: null}]}")
List<Response> findByNameAndPrice(String name, Integer price)
2) QueryDSL 方法,您可以在其中添加尽可能多的可选参数,而无需修改您的代码。它会自动生成查询。
请参阅此 link 了解更多信息:
我认为您无法使用查询定义的方法名称方法来做到这一点。来自文档 (reference):
JIRA
ticket Spring
团队仍在调查。
你可以这样试试
在存储库中
List<Response> findByName(String name)
List<Response> findByPrice(int price)
List<Response> findByNameAndPrice(String name, int price)
在您的服务文件中
public List<Response> findByNameAndPrice(String name, int price){
if(name == null ){
return repository.findByName(name);
}
if( price == 0){
return repository.findByPrice(price);
}
return repository.findByNameAndPrice(name, price);
}
在这里我找到了一个使用 mongodb 正则表达式的简单解决方案,我们可以这样写一个查询,
@Query("{name : {$regex : ?0}, type : {$regex : ?1})List<String> findbyNameAndType(String name, String type)
诀窍是如果我们想查询给定的参数,我们应该为其他参数设置一些默认值。作为一个例子,这里认为我们只提供名称。然后我们通过将其默认参数设置为“.*”,将类型设置为 select 所有可能的匹配项。
此正则表达式模式给出任何字符串匹配。
我有一个 mongo 存储库查询,如下所示,如果我们同时提供名称和价格,它会给出响应。如果我们只提供名称或价格或两者,我想得到回应。如何使这些参数可选。如果我们同时提供名称和价格,我想检索聚合结果,除非我只想从给定的字段中搜索。非常感谢你的帮助。
List<Response> findByNameAndPrice(String name, int price)
在这种情况下,您可能需要实现自定义 JPA 查询或需要使用 QueryDSL。
1) 自定义 JPA 查询,如果您想添加新的可选参数,您可能需要更改查询。
@Query(value = "{$or:[{name: ?0}, {?0: null}], $or:[{price: ?1}, {?1: null}]}")
List<Response> findByNameAndPrice(String name, Integer price)
2) QueryDSL 方法,您可以在其中添加尽可能多的可选参数,而无需修改您的代码。它会自动生成查询。
请参阅此 link 了解更多信息:
我认为您无法使用查询定义的方法名称方法来做到这一点。来自文档 (reference):
JIRA
ticket Spring
团队仍在调查。
你可以这样试试
在存储库中
List<Response> findByName(String name)
List<Response> findByPrice(int price)
List<Response> findByNameAndPrice(String name, int price)
在您的服务文件中
public List<Response> findByNameAndPrice(String name, int price){
if(name == null ){
return repository.findByName(name);
}
if( price == 0){
return repository.findByPrice(price);
}
return repository.findByNameAndPrice(name, price);
}
在这里我找到了一个使用 mongodb 正则表达式的简单解决方案,我们可以这样写一个查询,
@Query("{name : {$regex : ?0}, type : {$regex : ?1})List<String> findbyNameAndType(String name, String type)
诀窍是如果我们想查询给定的参数,我们应该为其他参数设置一些默认值。作为一个例子,这里认为我们只提供名称。然后我们通过将其默认参数设置为“.*”,将类型设置为 select 所有可能的匹配项。
此正则表达式模式给出任何字符串匹配。