如何查询 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 所有可能的匹配项。 此正则表达式模式给出任何字符串匹配。