【问题标题】:Can somebody help me building up an @Query that can be used with MongoDB有人可以帮我建立一个可以与 MongoDB 一起使用的 @Query
【发布时间】:2022-01-21 09:50:30
【问题描述】:

我已经根据我的要求布置了 Java 架构,但正在努力构建查询部分。

架构如下

Class AbcRequest{
List<Filters> filters;
}

Class Filters{
String abcCode;
List<String> abcType;
}

Class abcController{
getFilters(List<String>someList, boolean status, AbcRequest request){
for(Filters filter: request.getFilters(){
String abcCode = filter.getAbcCode();
List<String> abcTypes = filter.getAbcType();
  }
 }
}

现在我想将这些值传递给存储库,并根据它从数据库中获取所需查询的列表。

我的查询应该有如下条件: 其中 ((someList in ('a','b') and status='false' and abcCode='8' and abcType in ('done','pending') OR (someList in ('a','b' ) and status='false' and abcCode='6' and abcType in ('pending'))

如何编写 MongoDB @Query 以从存储库方法中获取此类查询。 它是许多“AND”和“OR”的组合 例如:-- where (a AND b AND c AND d) OR (a AND e AND f AND d)

我知道如何将简单的 OR 与 @Query 一起使用:- 例如构建查询(其中 A=10 OR B=10) @Query('$or' : [{A:10},{B:10}])

但我想要构建的查询有点复杂,并且正在努力解决。我也不想使用 Criteria 因为我必须处理返回类型。最好是使用@Query,我也被指示使用@Query。

任何帮助将不胜感激。

【问题讨论】:

    标签: java mongodb spring-boot spring-data-jpa mongodb-query


    【解决方案1】:

    也许你可以试试这个:

    Query query = new Query();
            Criteria criteria = new Criteria();
            Criteria a = new Criteria();
            a.andOperator(Criteria.where("someList").in(Arrays.asList("A","B")),Criteria.where(
                    "status").is(false),Criteria.where("abcCode").is(6),....)
            // B is the same as a
            Criteria b = new Criteria();
            //...
            
            criteria.orOperator(a,b);
            query.addCriteria(criteria);
    

    【讨论】:

    • 粉丝您好,感谢您的回答。由于某些限制,我无法使用标准。我必须同样使用@Query。一个如何使用Query 实现相同的想法。谢谢!
    • 好的,你可以了解一下MongoRepository。使用@Query("{'abcCode': '6', 'status': false}"),直接通过注解使用原生SQL@Query
    【解决方案2】:

    我找到了一个很好的链接来回答我自己的问题:writing complex query in mongo DB

    这将有助于使用 MongoDB 的 @Query 注释编写复杂的查询。

    这也将提供对如何使用 AND 和 OR 的生动理解。 谢谢!

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      相关资源
      最近更新 更多