mongodb 的增刪改查
Mongodb的的增刪改查
1. mongodb插入資料
命令:db.集合名稱.insert(document)
db.stu.insert({name:'gj', gender:1})
db.stu.insert({_id:"20170101", name:'gj', gender:1})
插文件時,如果不指定_id引數,MongoDB會為文件自動分配一個唯一的ObjectId
2. mongodb的儲存
命令:db.集合名稱.save(document)
db.stu.save({_id:'20170101', name:'gj', gender:2})
db.stu.save({name:'gj', gender:2})db.stu.find()
如果文件的id已經存在則修改,如果id不存在則新增
3 mongodb的查詢
命令:db.集合名稱.find()
可以使用以下資料進行練習
db.stu.insert([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true },
{"name" : "黃蓉", "hometown" : "桃花島", "age" : 18, "gender" : false },
{"name" : "華箏", "hometown" : "蒙古", "age" : 18, "gender" : false },
{"name" : "黃藥師", "hometown" : "桃花島", "age" : 40, "gender" : true },{"name" : "段譽", "hometown" : "大理", "age" : 16, "gender" : true },
{"name" : "段王爺", "hometown" : "大理", "age" : 45, "gender" : true },
{"name" : "洪七公", "hometown" : "華箏", "age" : 18, "gender" : true }])
3.1 簡單查詢
-
方法find(): 查詢
db.集合名稱.find({條件文件})
-
方法findOne():查詢,只返回第一個
db.集合名稱.findOne({條件文件})
-
方法pretty(): 將結果格式化;不能和findOne()一起使用!
db.集合名稱.find({條件文件}).pretty()
3.2 比較運算子
-
等於: 預設是等於判斷, 沒有運算子
-
小於:
$lt (less than)
-
小於等於:
$lte (less than equal)
-
大於:
$gt (greater than)
-
大於等於:
$gte
-
不等於:
$ne
查詢年齡大於18的所有學生
db.stu.find({age:{$gte:18}})
3.3 邏輯運算子
邏輯運算子主要指與、或邏輯
-
and:在json中寫多個條件即可
查詢年齡大於或等於18, 並且性別為true的學生
db.stu.find({age:{$gte:18},gender:true})
-
or:使用$or, 值為陣列, 陣列中每個元素為json
查詢年齡大於18, 或性別為false的學生
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
查詢年齡大於18或性別為男生, 並且姓名是郭靖
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
3.4 範圍運算子
使用$in
, $nin
判斷資料是否在某個陣列內
查詢年齡為18、 28的學生
db.stu.find({age:{$in:[18,28,38]}})
3.5 支援正則表示式
使用$regex編寫正則表示式
查詢name以'黃'開頭的資料
db.stu.find({name:{$regex:'^黃'}})
3.6 自定義查詢
mongo shell 是一個js的執行環境使用$where 寫一個函式, 返回滿足條件的資料
查詢年齡大於30的學生
db.stu.find({
$where:function() {
return this.age>30;}
})
3.7 skip和limit
-
方法limit(): 用於讀取指定數量的文件
db.集合名稱.find().limit(NUMBER)
查詢2條學生資訊
db.stu.find().limit(2)
-
方法skip(): 用於跳過指定數量的⽂檔
db.集合名稱.find().skip(NUMBER)
db.stu.find().skip(2)
-
同時使用
db.stu.find().limit(4).skip(5)
db.stu.find().skip(5).limit(4)
注意:先使用skip在使用limit的效率要高於前者
3.8 投影
在查詢到的返回結果中, 只選擇必要的欄位
命令:db.集合名稱.find({},{欄位名稱:1,...})
引數為欄位與值, 值為1表示顯示, 值為0不顯特別注意:
-
對於_id列預設是顯示的, 如果不顯示需要明確設定為0
-
對於其他不顯示的欄位不能設定為0
db.stu.find({},{_id:0,name:1,gender:1})
3.9 排序
方法sort(), 用於對查詢結果按照指定的欄位進行排序
命令:db.集合名稱.find().sort({欄位:1,...})
引數1為升序排列引數-1為降序排列
根據性別降序, 再根據年齡升序
db.stu.find().sort({gender:-1,age:1})
3.10 統計個數
方法count()用於統計結果集中文件條數
命令:db.集合名稱.find({條件}).count()
命令:db.集合名稱.count({條件})
db.stu.find({gender:true}).count()
db.stu.count({age:{$gt:20},gender:true})
4 mongodb的更新
db.集合名稱.update({query}, {update}, {multi: boolean})
-
引數query:查詢條件
-
引數update:更新操作符
-
引數multi:可選,預設是false,表示只更新找到的第一條資料,值為true表示把滿足條件的資料全部更新
db.stu.update({name:'hr'},{name:'mnc'}) # 全文件進行覆蓋更新
db.stu.update({name:'hr'},{$set:{name:'hys'}}) # 指定鍵值更新操作
db.stu.update({},{$set:{gender:0}},{multi:true}) # 更新全部
注意:"multi update only works with $ operators"
-
multi引數必須和$set一起使用!
5 mongodb的刪除
db.集合名稱.remove({query}, {justOne: boolean})
- 引數query:可選,刪除的⽂檔的條件
- 引數justOne:可選, 如果設為true或1,則只刪除一條,預設false,表示刪除全部
小結
-
mongo shell中的增db.集合名.insert({資料})db.集合名.save({包含id的完整資料}) # 根據指定的id進行儲存,存在則更新,不存在則插入
-
mongo shell中的刪db.集合名.remove({條件}, {justOne: true/false})
-
mongo shell中的改db.集合名.update({條件}, {$set:{完整資料/部分欄位}}, {multi: true/false})
-
mongo shell中的查db.集合名.find({條件}, {欄位投影})