mongoTemplate通过Query条件指定查询条件和返回字段 - Go语言中文社区

mongoTemplate通过Query条件指定查询条件和返回字段



本文转自 Spring Data MongoDB 基本文档查询(Query、BasicQuery) ,仅做学习备份,如有侵权请联系博主删除!

一.简介

     Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我们介绍了对MongoDB的新增和删除, 今天我们要介绍Java代码实现对MongoDB实现查询操作。

     我们回顾一下,我们在之前介绍了MongoDB的基本文档查询,MongoDB的查询语法:

       db.orders.find({{<field1>:<value1>,<field2>: <value2>, ... } },{field1:<boolean>, field2: <boolean> ... })


      我们介绍是SpringData MongoDB 提供了find方法,方便我们通过java代码实现对MongoDB的查询操作:

       mongoTemplate.find (query, entityClass)

      参数说明:

       entityClass:实体class,也就是要把文档转换成对应的实体。

      query查询语句的实现的方式有两种:

 

        1.org.springframework.data.mongodb.core.query

          构造函数

          Query (Criteria criteria)

         接受的参数是org.springframework.data.mongodb.core.query.Criteria

       

         Criteria是标准查询的接口,可以引用静态的Criteria.where的把多个条件组合在一起,就可以轻松地将多个方法标准和查询连接起来,方便我们操作查询语句。

        例如: 查询条件onumber="002"

        mongoTemplate.find (new Query(Criteria.where("onumber").is("002")),entityClass)


        多个条件组合查询时:

       例如:onumber="002" and cname="zcy"

     

         mongoTemplate.find (new Query(Criteria.where("onumber").is("002").and("cname").is("zcy")),entityClass)

 

       例如:onumber="002" or cname="zcy"

         mongoTemplate.findOne(newQuery(newCriteria().orOperator(Criteria.where("onumber").is("002"),Criteria.where("cname").is("zcy"))),entityClass); 


      我们通过Criteria的and方法,把这个条件组合一起查询

 

      Criteria提供了很多方法,我们这边先介绍基本文档的查询操作符,对于数组文档或者内嵌文档的操作符,我们下一篇在介绍。

  

Criteria

Mongodb

说明

Criteria and (String key)

$and

并且

Criteria andOperator (Criteria…​ criteria)

$and

并且

Criteria orOperator (Criteria…​ criteria)

$or

或者

Criteria gt (Object o)

$gt

大于

Criteria gte (Object o)

$gte

大于等于

Criteria in (Object…​ o)

$in

包含

Criteria is (Object o)

$is

等于

Criteria lt (Object o)

$lt

小于

Criteria lte (Object o)

$lte

小等于

Criteria nin (Object…​ o)

$nin

不包含

。。。。。。。。。。。。。。

 

 

   2、子类 org.springframework.data.mongodb.core.query.BasicQuery


     构造方法

         BasicQuery(DBObject queryObject)

         BasicQuery(DBObject queryObject, DBObject fieldsObject)

         BasicQuery(java.lang.String query)

          BasicQuery(java.lang.String query, java.lang.String fields)

        

         DBObject就是转换成JSON格式,提供了我们回顾一下,MongoDB查询时,

             db.collection.find(query,projection),query类型是document,所以,我们想使用JSON字符串查询时,我们使用DBObject创建查询实例。

                 

               DBObject是接口,提供了几个子类,

                            

                  



            我们比较经常使用的比较底层子类,扩展了自己的方法和继承父类,所以功能会比较多。

 

           1. BasicDBObject

                BasicBSONObject extendsLinkedHashMap<String,Object> implements BSONObject

                BasicDBObject extends BasicBSONObject implementsDBObject


               例如:查询条件onumber="002"


                DBObject obj = new BasicDBObject();

               obj.put( "onumber","002" );

             

               相当于

                db.collect.find({"onumber":"002"}) 

 

 

             2. BasicDBList

                   BasicBSONList extendsArrayList<Object> implements BSONObject

                   BasicDBList extends BasicBSONList implements DBObject


                   BasicDBList可以存放多个BasicDBObject条件

 

                       例如:我们查询onumber=002OR cname=zcy1

                         BasicDBList basicDBList=new BasicDBList();

                         basicDBList.add(new BasicDBObject("onumber","002"));

                         basicDBList.add(new BasicDBObject("cname","zcy1"));

                        DBObjectobj =newBasicDBObject();

                       obj.put("$or", basicDBList);

                       Query query=new BasicQuery(obj);

           相当于

                  db.orders.find({$or:[{"onumber":"002"},{"cname":"zcy1"}]})

                

                      basicDBList.add方法是添加一个文档的查询条件

                     


             3. com.mongodb. QueryBuilder


                     QueryBuilder默认构造函数,是初始化BasicDBObject,QueryBuilder多个方法标准和查询连接起来,方便我们操作查询语句。跟Criteria是标准查询的接口一样,

                    

              QueryBuilder和BasicDBObject配合使用

 

              QueryBuilder帮我们实现了  $and等操作符,我们查看部分的源代码:QueryBuilder部分的源代码:

[java] view plain copy
  1. publicclassQueryBuilder {  
  2.    
  3.   /** 
  4.     * Creates a builder with an empty query 
  5.     */  
  6.   publicQueryBuilder() {  
  7.        _query = new BasicDBObject();  
  8.    }  
  9.   publicQueryBuilder or( DBObject ... ors ){  
  10.        List l = (List)_query.get( "$or" );  
  11.        if ( l == null ){  
  12.            l = new ArrayList();  
  13.            _query.put( "$or" , l );  
  14.        }  
  15.        for ( DBObject o : ors )  
  16.            l.add( o );  
  17.        return this;  
  18.   }  
  19.   
  20.   /** 
  21.     * Equivalent to an $and operand 
  22.     * @param ands 
  23.     * @return 
  24.     */  
  25.   @SuppressWarnings("unchecked")  
  26.   publicQueryBuilder and( DBObject ... ands ){  
  27.        List l = (List)_query.get( "$and" );  
  28.         版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
    原文链接:https://blog.csdn.net/u012031380/article/details/78840892
    站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 16:30:01
  • 阅读 ( 1627 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢