0

我的 GET api 中有多个查询参数(如姓名、年龄、性别、位置等...n 个数字)。现在我需要使用这些查询值查询我的 mongo 数据库。现在用户可以发送 0 到 n 个查询参数。

我正在尝试使用类似的东西

findByNameAndAge(String Name , String Age)

或者

findByNameAndAgeAndGender(String Name , String Age, String Gender)

但问题是考虑到用户可以发送的所有排列和组合,我将不得不编写多个查询。有没有更好的方法呢?

4

2 回答 2

0

您将需要弄脏 Mongo 操作类并根据传递的模型参数动态构建条件查询。为了使事情更容易,您可以坚持将参数名称映射到实体属性约定。

于 2019-09-21T16:38:03.657 回答
0

在您的情况下,您可以使用

<S extends T> Iterable<S> findAll(Example<S> example);

因此,第一步是从您的请求参数创建一个示例,为此您需要创建一个实体实例,该实例具有要查询的所需属性的值,而其他属性则为 null。例如,如果您有查询名称和年龄作为参数。因此,您只需设置实体的名称和年龄,并将其余属性设为 null。如果你有你的实体,你应该只创建示例并查询它。

Example<ENTITY_CLASS> example = Example.of(createdEntity);
return repository.findAll((example);

还有一些其他选项可以使用 Example 和 ExampleMatcher 以包含和正则表达式来区分大小写。您还可以设置他是否需要在字段之间使用 OR 或 AND 运算符。

你可以看看这里

于 2019-09-21T22:38:38.473 回答