我正在编写一个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'}]} ]})
所以我需要做以下事情:
>
文件必须将“名称”作为[“Amy”、“Maya”]之一,或者必须具有以下学校-学院-公司组合之一-
{'学校':'S1','学院':'Col1','公司':'CompCop'},{'学校':'S2','学院':'Col1','公司':'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'}]}]}]}
比使用MongoTemboard更具可读性!
问题内容: 我有我的数组数据,如下所示: 如何基于相同的“银行名称”求和“金额”。 我的数据应显示如下: 问题答案:
问题内容: 我在尝试为此表定义SQL查询时遇到了麻烦: 有一张患者表格,其访问时记录的体重读数包括以下几列: 患者编号 体重读数 访问ID(每次访问一个) 换句话说,如果在两个记录中两个访问ID相同,则在相同的访问日期读取了两个权重。 我有这个查询来“让所有至少有两个体重读数高于150的患者”: 这是我的问题:如果我想修改此查询以便查询以下内容,该怎么办: “让所有患者在不同的访问中至少有两个体重
我有一个示例数据集,如下所示 Col1 Col2 Col3 A 1,2,3 A123 A 4,5 A456 A 1,2,3 A456 A 4,5 A123 我参考了一些解决方案,并尝试了以下方法。但它只追加单个列。
我有一个不那么独特的需求,但我只是找到了正确的术语来搜索,因为我只得到如何查询列表/数组字段或嵌套元素的结果。 提前感谢所有的帮助。
本文向大家介绍MongoDB查询以从文档中获取不同的FirstName值,包括了MongoDB查询以从文档中获取不同的FirstName值的使用技巧和注意事项,需要的朋友参考一下 对于不同的值,请使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是获取不同的FirstName值的查询- 这将产生以下输出-