1. 程式人生 > >spring-data-mongodb

spring-data-mongodb

一、新增

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 queryBuilder= newQueryBuilder(); 

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