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
- >db.collection.update(
- <query>,
- <update>,
- upsert:<boolean>,
- 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類
- BasicDBObject basicDBObject=new BasicDBObject();
- basicDBObject.put("$set", new BasicDBObject("date","2015-08-09"));
- Updateupdate=newBasicUpdate(basicDBObject);
- mongoTemplate.updateFirst(new Query(Criteria.where("cname").is("zcy")), update,collectionName);