【问题标题】:How can I use $where in spring data MongoDB?如何在 Spring Data MongoDB 中使用 $where?
【发布时间】:2020-05-06 12:41:35
【问题描述】:

我无法在SpringDataMongoDb 中使用$where

有没有办法在SpringBoot 中实现这一点?

db.getCollection('my_collection').find({ $where : function(){
    for (var key in this.action_status){
        return this.action_status[key] == false;
    }
}})

谢谢。

【问题讨论】:

    标签: java spring-boot mongodb-query where-clause spring-data-mongodb


    【解决方案1】:

    可以通过两种方式实现,一种是在Spring Boot应用程序中使用MongoTemplate和条件查询

    Query query = new Query();
    query.addCriteria(Criteria.where("action_status").eq(false));
    List<User> users = mongoTemplate.find(query,MyCollectionClassName.class);
    

    另一种方法是使用 mongo 存储库

    @Query("SELECT mc FROM my_collection mc WHERE mc.status = false")
    MyCollectionClassName findMyCollectionClassNameByStatus(Integer status);
    

    参考文献:

    https://www.baeldung.com/queries-in-spring-data-mongodb
    https://www.baeldung.com/spring-data-jpa-query
    

    【讨论】:

    • 这个问题是关于 Spring Data Mongo,而不是 Spring Data JPA
    【解决方案2】:

    1:您可以创建一个扩展 MongoRepository 并具有 JSON Query 方法的存储库,如下所示:

    @Query("{'action_status':{$eq:?0}}")
    public List<YourObj> findByActionStatus(boolean status);
    

    2:您可以在 MongoRepository 中使用按对象属性查询。假设您的对象中有一个名为“isActionStatus”的字段,只需在您的存储库中声明此方法即可:

    public List<YourObj> findByIsActionStatus(boolean actionStatus);
    

    Spring Data 会破坏方法名称,例如“select * from ... where isActionStatus = actionStatus

    如果您需要更复杂的查询,可以在此处找到支持的关键字:https://docs.spring.io/spring-data/mongodb/docs/1.2.0.RELEASE/reference/html/mongo.repositories.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多