使用 Spring MongoRepository 根据相同查询参数的不同值组合获取所有 Mongo 文档

三田

我正在编写一个 Web 服务,在该服务中,我需要在响应用户的 REST 请求时提供来自 MongoDb 的文档列表。过滤器参数在请求的请求负载中提供。我需要使用匹配参数组合的 Spring 的 MongoRepository 接口获取所有文档。直接应用于集合的以下查询按我想要的方式工作:

db.getCollection('userCollection').find({ '$and' : [ { 'admin':'admin1', 'address':'add1'}, {'$or': [{ 'name' : { '$in':['Amy','Maya'] } }, {'school': 'S1', 'college': 'Col1', 'company': 'CompCop'}, {'school': 'S2', 'college': 'Col1', 'company': 'CompShop'}]} ]})

所以我需要做以下事情:

  1. 所有文件必须有“admin”=“admin1”和“address”=“add1”
  2. 文件必须将“姓名”作为 [“Amy”、“Maya”] 之一,或者它们必须具有以下学校-学院-公司组合之一-

    {'school': 'S1', 'college': 'Col1', 'company': 'CompCop'}, {'school': 'S2', 'college': 'Col1', 'company': 'CompShop'}

这些值和此类组合的数量可以根据动态传入的 Web 请求中提供的内容而有所不同。

第二点是我在使用 @Query 注释将基于 JSON 的查询合并到 java 中时遇到的问题。

我想将此信息作为以下存储库方法的一部分提供:

@Query({'$and': [{'admin': ?0, 'address': ?1}, {'$or': [{'name': {'$in': ?2}}, <add solution here for adding list of school-college-company combinations> ]}]})
public List<Users> find(String admin, String address, List<String> names, <insert parameters for 'school-college-company' combinations>);

我搜索了一个解决方案,我可以在其中提供具有参数的类型的对象列表

class FilteringClass {
    String school;
    String college;
    String company;
} 

但没有任何运气。

我首先尝试将每个“学校”、“学院”和“公司”作为单独的列表收集,并将它们作为查询参数提供,但显然,这不太正确,因为它将获取具有值的所有可能排列的文档,而不是像三者的独特组合。

请让我知道是否有任何解决方案,如上所述我需要它。提前致谢。

三田

完全按照问题中的描述创建了一个类:

class SCCFilter {
String school;
String college;
String company;
} 

当请求来自具有这些参数的用户时,对于请求负载中的每个元素,我选择学校、大学和公司值并将它们存储在“过滤器”列表中。

(当然,这可以优化以避免重复,但作为上述问题的解决方案,它可以正常工作)

然后我写了以下查询:

@Query("{ '$and' : [ { 'admin' : ?0 , 'address' : ?1 } , { '$or' : [{'name': {'$in': ?2 }}, {'$or': ?3 }] }]}")
public List<Users> find(String admin, String address List<String> names, List<SCCFilter> filters)

这是我在运行时从日志中提取以在 Mongo DB 中测试(成功)的最终查询:

{ "$and" : [ { "admin" : "admin1" , "address" : "addr1"} , { "$or" : [ { "name" : { "$in" : [ "Amy" , "Maya"]}} , { "$or" : [ {'school': 'S1', 'college': 'Col1', 'company': 'CompCop'}, {'school': 'S2', 'college': 'Col1', 'company': 'CompShop'}]}]}]}

比使用 MongoTemplate 更具可读性!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Data Mongo在查询中使用OR

插入嵌入文档而不阅读整个文档-Spring,Mongo

在Java Spring中为Mongo嵌入文档

Spring Data MongoRepository保存具有不同字段数的对象

使用mongo go driver查找集合中的所有文档

使用Spring mongoTemplate的条件/最大mongo查询

如何使用Spring数据从Mongo中的文档数组字段中仅获取匹配结果

如何使用Spring + Mongo更新并添加到子文档列表

使用pymongo将对象列表作为不同的Mongo文档插入

使用Spring REST文档记录空值

使用Mongo聚合查询按类型获取最新文档

使用Spring JPA从Mongo集合中的Sub文档列表中获取数据

我如何使用@Query-> Spring data mongo从@DBRef文档中获取数据

Spring Data Mongo DB Criteria查询可根据条件过滤嵌套文档

Mongo聚合:使用已找到文档的$ count进行查询

使用Spring Data Mongo中的条件查询来获取结果时,更新文档中的字段之一

Mongo查询以获取不同的嵌套文档

使用Spring Data在Mongo DB中展开和拆分多个子文档

使用Python中的嵌套列表理解从mongo集合中获取所有文档

尝试使用LiveCode“构建”查询以从Mongo获取文档

Spring MongoRepository为空

使用PHP解析Mongo文档

Mongo / Morphia查询整个文档

使用Spring MongoOperations根据查询获取所有文档

查询与mongodb中的条件匹配的文档及其所有子文档(使用spring)

根据时间更新mongo文档

如何配置 spring-data-mongodb 以使用共享相同文档模型的 2 个不同 mongo 实例

用于 int 值的 Spring Data MongoRepository 之间

如何使用 mongoose 查询 mongo 文档?