• spring data mongodb CURD


    一、添加

    Spring  Data  MongoDB 的MongoTemplate提供了两种存储文档方式,分别是save和insert方法,这两种的区别:

      (1)save :我们在新增文档时,如果有一个相同_ID的文档时,会覆盖原来的。

         1)void save (Object objectToSave) 保存文档到默认的集合。

              2)void save(Object objectToSave, String collectionName) 对指定的集合进行保存。

      (2)insert:我们在新增文档时,如果有一个相同的_ID时,就会新增失败。   

            1)void insert(Object objectToSave) 保存文档到默认的集合。

            2)void insertAll(Object objectsToSave) 批量添加到默认的集合。

            3)void insert(Object objectToSave, String collectionName) 对指定的集合进行保存。

    二、删除

      1、删除文档

           Spring  Data MongoDB 的MongoTemplate提供删除文档如下几个方法:

                    

        @Override
        public void remove(Map<String, Object> params,String collectionName) {
          mongoTemplate.remove(new Query(Criteria.where("id").is(params.get("id"))),User.class,collectionName);
        }

      2、 删除集合

      @Override
      public void dropCollection(String collectionName) {
        mongoTemplate.dropCollection(collectionName);
      }---------------------------------------------------------集合、索引都不存在了,类型SQL的drop。

    三、查询

      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提供了很多方法,我们这边先介绍基本文档的查询操作符,对于

      数组文档或者内嵌文档的操作符,我们下一篇在介绍。

      

      

    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 queryBuildernewQueryBuilder(); 

               queryBuilder.or(new BasicDBObject("onumber","002"),newBasicDBObject("cname","zcy1")); 

               Query query=new BasicQuery(queryBuilder.get());

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

        find查询时指定返回的需要的字段

     

        org.springframework.data.mongodb.core.query.BasicQuery提供了

                 构造方法

                 BasicQuery(DBObject queryObject, DBObject fieldsObject)

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

          BasicQuery查询语句可以指定返回字段,构造函数

                 BasicQuery(DBObject queryObject, DBObject fieldsObject)

                fieldsObject 这个字段可以指定返回字段

                fieldsObject.put(key,value)

                key:字段

               value:

                 说明:

                      1或者true表示返回字段

                     0或者false表示不返回该字段

                   _id:默认就是1,没指定返回该字段时,默认会返回,除非设置为0是,就不会返回该字段。

                   指定返回字段,有时文档字段多并数据大时,我们指定返回我们需要的字段,这样既节省传输数据量,减少了内存消耗,提高了性能,在数据大时,性能很明显的。

     

    四、修改

      我们对MongoDB的基本文档修改, MongoDB的查询语法:

    [sql] view plain copy
     
    1. >db.collection.update(  
    2.  <query>,  
    3.  <update>,  
    4.  upsert:<boolean>,  
    5.  multi:<boolean>  

     

     

    参数

    类型

    描述

    query

    document

    要修改哪些的查询条件,类似于SQL  where

    update

    document

    要修改的字段对应的值

    upsert

    boolean

    可选的,默认值是false。如果根据查询条件没找到对应的文档,如果设置为true,相当于执行insert,如果设置为false,不做任何的操作。

    multi

    boolean

    可选的,默认值是false。如果根据查询条件找到对应的多条记录是,如果设置为false时,只修改第一条,如果设置为true,全部更新

     

    我们SpringData  MongoDB提供的对应的修改方法

      1. mongoTemplate. updateFirst  修改符合条件第一条记录

          

      2. mongoTemplate. updateMulti  修改符合条件的所有

         

      3. mongoTemplate. Upsert        修改符合条件时如果不存在则添加

         

      参数说明:

         (1)    Query : 要修改哪些的查询条件,类似于SQL 的 where

     

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

           2) org.springframework.data.mongodb.core.query.BasicQuery

     

       (2)    update

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

          2)      子类org.springframework.data.mongodb.core.query.BasicUpdate

     

              org.springframework.data.mongodb.core.query.BasicUpdate继承了org.springframework.data.mongodb.core.query.Update

     

        Update提供了一些方法对基本文档进行操作

    Spring MongoDB Update

    MongoDB

    描述

         

    Update rename (String oldName, String newName)

    $rename

    重命名字段

    Update set (String key, Object value)

    $set

    用来指定一个键的值,如果不存在则创建它

    Update unset (String key)

    $unset

    用来指定一个键的值,如果不存在不创建创建它

     

     BasicUpdate继承了update方法,BasicUpdate构造参数可以自己实现update  SQL 语句

      1)BasicUpdate(DBObjectupdate Object)  Object是JSON格式

      2)BasicUpdate(java.lang.StringupdateString)

     

      BasicUpdate需要手动实现$set等操作符SQL语句,也可以使用Update的一些操作修改文档的操作方法,因为继承了Update类

     

    1. BasicDBObject basicDBObject=new BasicDBObject();  
    2. basicDBObject.put("$set"new BasicDBObject("date","2015-08-09"));  
    3. Updateupdate=newBasicUpdate(basicDBObject);  
    4. mongoTemplate.updateFirst(new Query(Criteria.where("cname").is("zcy")), update,collectionName);

     

  • 相关阅读:
    原生ES-Module在浏览器中的尝试
    常见的web攻击总结
    node第三方模块----nodemailer发送邮件
    08----mockjs处理前端传来的路径,获取?后面的值
    07----mockjs获取前端传递的数据
    05-----Mock.Random 扩展方法
    03----Mock.mock() 生成接口,随机数据
    06----Mock.setup()
    十一. for of
    十.数组解构
  • 原文地址:https://www.cnblogs.com/GtShare/p/7685557.html
Copyright © 2020-2023  润新知