MongoDB的增刪改查

靜以致遠√團團發表於2016-08-05


增刪改查的高階應用
Capped Collection(固定集合)
GridFS 大檔案上傳或下載

1: insert
MongoDB是面向文件儲存的資料庫,文件結構形式叫BSON(類似JSON)
db.testdb.insert({name:"user1"});
s//save()如果已經存在就不會插入,如果不存在就插入
//這裡要與id相同的值才不會被插入
//save就是id相同就更新,沒有相同id就插入

刪除
db.c1.remove();
db.c1.remove({name:"user1"});

db.c1.find({name:"user1"},{name:1, age:1, _id:0});
條件表示式
< <= > >= !=
$gt: 大於
$lt: 小於
$gte: 大於等於
$lte: 小於等於
$ne: 不等於


統計: 
db.c1.count();
db.c1.find().count();
//count(1); 裡面有一個條件,如果為1,那麼會取條件,如果為0不會理會條件語句


排序:
db.c1.find().sort(age:1); //1是升序 0是降序

取多少個
db.c1.find().limit(4);

跳過幾個
db.c1.skip(1);
db.c1.skip(0).limit(10).sort({age:-1});

$all
操作類似於$in操作,但是不同的是,$all操作要求陣列裡面的值全部是包含在返回的記錄裡面
db.c2.find({post:{$all:[1,2,3]}});

$exists
操作檢查一個欄位是否存在
db.c2.find({age:{$exists:1}}); 測試一個欄位是否存在

$mod
操作可以讓我們簡單的進行取模操作,而不需要用到where子句
//這裡的是欄位值的取餘操作
db.c1.find({age:{$mod:[2]}});


$in 操作類似於傳統關聯式資料庫中的IN
db.c1.find({age:{$in:[1,2,3]}})

$nin 與$in相反
db.c1.find({age:{$nin:[2,3,4]}});


$or 檢視指定多個條件的記錄,跟sql的or差不多
db.c1.find({$or:[{name:"user1"},{name:"user2"},{age:10}]});

$nor 與$or相反過濾指定的條件
db.c1.find({$nor:[{name:"user1"},{name:"user2"},{age:10}]});

 

學習內容:
1.mongodb增加操作
2.mongodb刪除操作
3.mongodb查詢操作
增刪改查的高階應用
Capped Collection(固定集合)
GridFS 大檔案上傳或下載

1: insert
MongoDB是面向文件儲存的資料庫,文件結構形式叫BSON(類似JSON)
db.c1.insert({name:"user1"});
db.c1.save({_id:1, name:"user1"}); //save()如果已經存在就不會插入,如果不存在就插入
//這裡要與id相同的值才不會被插入
//save就是id相同就更新,沒有相同id就插入

刪除
db.c1.remove();
db.c1.remove({name:"user1"});

db.c1.find({name:"user1"},{name:1, age:1, _id:0});
條件表示式
< <= > >= !=
$gt: 大於
$lt: 小於
$gte: 大於等於
$lte: 小於等於
$ne: 不等於


統計: 
db.c1.count();
db.c1.find().count();
//count(1); 裡面有一個條件,如果為1,那麼會取條件,如果為0不會理會條件語句


排序:
db.c1.find().sort(age:1); //1是升序 0是降序

取多少個
db.c1.find().limit(4);

跳過幾個
db.c1.skip(1);
db.c1.skip(0).limit(10).sort({age:-1});

$all
操作類似於$in操作,但是不同的是,$all操作要求陣列裡面的值全部是包含在返回的記錄裡面
db.c2.find({post:{$all:[1,2,3]}});

$exists
操作檢查一個欄位是否存在
db.c2.find({age:{$exists:1}}); 測試一個欄位是否存在

$mod
操作可以讓我們簡單的進行取模操作,而不需要用到where子句
//這裡的是欄位值的取餘操作
db.c1.find({age:{$mod:[2]}});


$in 操作類似於傳統關聯式資料庫中的IN
db.c1.find({age:{$in:[1,2,3]}})

$nin 與$in相反
db.c1.find({age:{$nin:[2,3,4]}});


$or 檢視指定多個條件的記錄,跟sql的or差不多
db.c1.find({$or:[{name:"user1"},{name:"user2"},{age:10}]});

$nor 與$or相反過濾指定的條件
db.c1.find({$nor:[{name:"user1"},{name:"user2"},{age:10}]});

$size
操作將會查詢陣列長度等於輸入引數的陣列

$elemMatch 元素配置的意思


slaveOk
當我們在replica set進行檢索操作時,預設的路由會選擇master機器,當我們需要針對任意的從機進行查詢的時候,我們需要開啟slaveOk選項。當我們在沒有開啟salveOk選項的時候,如果進行此操作會報如下錯: *** not master and slaveok=false
所以我們要進行如下操作: rs.slaveOk(); // enable querying a secondary db.users.find(...)


11) Cursors遊標及Cursor Methods
遍歷遊標
var x = db.c1.find();
x.next();
x.hasNext();
while(x.hasNext() == true){
x.next();
}


NULL查詢(有一個值是為null,或者一個值不存在)
db.c4.find({age:null}); //列出所有為null或者不存在的值
db.c4.find({age:{$type:10}}); //列出所有為null的資料

第二種寫法
db.c4.find({age:{$exists:1, $in:[null]}});
//兩個條件,一個是exists必須存在,二是為null的資料

$slice

4. Update
1) 語法 db.collection.update( criteria, objNew, upsert, multi )
引數說明: Criteria:用於設定查詢條件的物件 Objnew:用於設定更新內容的物件 Upsert:如果記錄已經存在,更新它,否則新增一個記錄 Multi:如果有多個符合條件的記錄,全部更新 注意:預設情況下,只會更新第一個符合條件的記錄

$set //修改欄位 
db.c5.update({name:"user1"},{$set:{age:10}},0,1);

$inc //對欄位進行加 a = a+1
db.c5.update({},{$inc:{age:-10}},0,1);

$unset //刪除一個欄位
db.c5.update({},{$unset:{age:1}});

$push
db.c5.update({},{$push:{arr:1}}); //壓入一個值進入陣列


$pushAll
db.c5.update({}, {$pushAll:{arr:[2,3,4]}}); //壓入多個值進入陣列

$pop
db.c5.update({}, {$pop:{arr:1}}); //彈出陣列中的最後一個元素
db.c5.update({}, {$pop:{arr:1}}); //彈出陣列中的第一個元素

$addToSet
語句: {$addToSet: {field: value}}
如果filed是一個已經存在的陣列,並且value值不在其中,那麼value加入到陣列中
filed不存在,那麼把value當成一個陣列儲存到filed中
filed是一個已經存在的非陣列型別,那麼將會報錯

擴充套件肜戶
{$addToSet:{a:{$each:[1,2,3,4,5,6]}}};

$pull
語法:{$pull:{field:_value}}
功能: 如果field是一個陣列,那麼刪除符合_value檢索條件的記錄
如果field是一個已經存在的非陣列,那麼會報錯

$pullAll
語法: {$pullAll:{field:value_array}}
功能: 同$pull類似,只是value的資料型別是一個陣列

$rename
語法:{$rename:{old_field_name: new_field_name}}
功能:重新命名指定的欄位名稱

特殊運算子:$
$運算子程式碼查詢記錄中第一個匹配條件的記錄項
$db.c5.update({"arr.title":"linx"}, {$set:{arr.$.title:"I lover linx"}});

注意: 在陣列中用$配合$unset運算子的時候,效果不是刪除的元素,而是把匹配的元素變成null
$db.c5.update({"arr.title":"php"},{$unset:{arr.$:1}});


var x = db.c1.findOne({"user":"user1"});
x.age = 40;
x.nickname="xlc";
db.c1.save(x);


效能監控
透過對資料庫的效能監控,能夠更好的瞭解資料庫的工作狀態,從頁進行最佳化
介紹幾個效能監控的工具
Mongofniff
此工具可以從底層監控到底有那些命訟傳送給MongoDB去執行
./mongosniff --soruce NET lo
它是實時動態監視的,需要開啟中一個客戶端進行命訟操作,可以將這些資料輸出到一個日誌檔案中,那麼就可以保留下所有資料庫操作的歷史記錄,對於後期的效能分析和安全審計工作將是一個巨大的貢獻


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29320885/viewspace-2123014/,如需轉載,請註明出處,否則將追究法律責任。

相關文章