1. 程式人生 > >網易雲課堂\『李興華java培訓23』MongoDB資料庫\章節2課時20遊標.sql

網易雲課堂\『李興華java培訓23』MongoDB資料庫\章節2課時20遊標.sql



 更多課程請訪問:www.mldn.cn
課程講解程式碼下載:http://pan.baidu.com/s/1dDxvrnr
課程使用工具下載:http://pan.baidu.com/s/1mg1kMjm
課程筆記:http://yuedu.163.com/news_reader/#/~/source?id=d0b66e2ed0f84f8f8f4ea1a357964f36_1&cid=2cc98f9ffa0e4650bf9d0dc166f1a0e4_1
 
 --  章節1課時2安裝並配置MongoDB   http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1453011&courseId=1211033 
 
  點 mongodb-win32-x86_64-2008plus-ssl-3.0.3-signed.msi 安裝 安裝路徑: D:\MongoDB\ 
  
  配置環境變數 D:\MongoDB\bin      
  
  在 D:\MongoDB 下新建 db 資料夾  並且在此目錄下儲存所有資料檔案
  
  
  不設定埠號啟動 mongodb 服務: mongod --dbpath D:\MongoDB\db
  設定埠號啟動 mongodb 服務: mongod --dbpath D:\MongoDB\db --port=27000
  
  在 D:\MongoDB 下新建 mongodb.conf   , log  資料夾 ,再在log下新建 mongodb.log 
  
  在  mongodb.conf  寫上 : 
  
#設定資料目錄的路徑
dbpath=  D:\MongoDB\db
#設定日誌資訊的檔案路徑
logpath=D:\MongoDB\log\mongodb.log




#開啟日子輸出操作
logappend=true
#在以後進行使用者管理的時候使用它 
noauth=true


port=27001



  
  檢視所有資料庫 : show databases  
  db.shutdownServer()   切換到 admin 資料庫  : use admin 
  重新啟動服務 : mongod -f D:\MongoDB\mongodb.conf 
  
 
 
 -- mongodb由於目標計算機積極拒絕 無法連線  http://blog.csdn.net/u013249965/article/details/52318920 
 
 cmd  :  mongod --logpath D:\MongoDB\log\MongoDB.log,實現log檔案儲存設定 
 
  繼續執行:mongod --dbpath D:\MongoDB\MongoDB\db ,實現資料儲存位置設定
 
 
--  章節1課時3MongoDB基本使用  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1454006&courseId=1211033  
 
 
 
  show databases  
 
 db.createCollection("emp")  : 建立集合 
 db.emp.find()
 
 db.dept.insert({"deptno":10,"dname":"財務部","loc":"北京"})
 db.dept.find()
 
 
 
var deptData={
"deptno":10,
"dname":"財務部",
"loc":"北京",
"avg":8000.0
}
db.dept.insert(deptData)
db.dept.find()
 
 
 db.dept.findOne()
 
 db.dept.update({"_id":ObjectId("5a389efb3a4bdb955c8ac5ee")},deptData)
 db.dept.drop() : 刪除  
 
 db.dept.remove({"_id": ObjectId("5a389efb3a4bdb955c8ac5ee")});     :  刪除
 
 db.dropDatabase() : 刪除當前所在資料庫 
 
 
 --  章節2課時4資料增加操作  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1453013&courseId=1211033
 
 
  mongodb 除了增加其它都很麻煩 征服 Mongodb 之 CRUD http://snowolf.iteye.com/blog/1796749/ 
  
  
  增加 : db.集合.insert()
  
  db.infos.insert({url:"www.mldn.cn"})
  
   儲存陣列 : db.infos.insert([{url:"www.xx.cn"},{url:"www.ee.cn"}])
  
 
  
--  章節2課時5資料查詢(簡介) http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1455015&courseId=1211033   




查詢核心語法 :db.集合名稱.find({查詢條件}[,{設定顯示的欄位}])
db.infos.find({"url":"xxx"}).pretty() : 漂亮顯示 
 
db.infos.find();
db.infos.find({"url":"www.ee.cn"});
db.infos.find({"url":"www.ee.cn"},{"_id":0});    : 不顯示_id
db.infos.find({"url":"www.ee.cn"},{"_id":0,"url":1}).pretty(); 
 
 
--  章節2課時6資料查詢(關係運算)  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463002&courseId=1211033


 MongoDB的連線運算  http://blog.csdn.net/u012388497/article/details/50259241 


MongoDB查詢語法 https://www.cnblogs.com/think_fish/p/3422307.html 

db.collection.insert({"age":22,"name":"xx"},{"age":45,"name":"xx1"},{"age":66,"name":"xx2"})
db.collection.insert([{"age":22,"name":"xx"},{"age":45,"name":"xx1"},{"age":66,"name":"xx2"}])



$gt 大於   > db.collection.find({age:{$gt:18}});  //年齡大於18歲,不包含18歲


$lt 小於    < db.collection.find({age:{$lt:25}});  //年齡小於25歲,不包含25歲


$gte 大於或等於  >=db.collection.find({age:{$gte:18}});//年齡大於等於18歲的,包含18歲


$lte  小於等於     <=db.collection.find({age:{$lte:25}});//年齡小於等於25歲的,包含25歲


不等於 $ne 不等於 noe equals  db.collection.find({age:{$ne:18}})  ;//年齡不等於18 


$exists 驗證一個元素是否存在 這個語法有點繞


db.collection.find({title:{$exists:true}});  //如果記錄中有包含title屬性的全部返回


db.collection.find({title:{$exists:false}}); //如果記錄中有包含title屬性的全部不返回,不包含title屬性的全部返回


 
 db.students.drop();
 db.students.insert({"name":"張三","sex":"男","age":12,"score":78,"address":"海淀區"})
 db.students.insert({"name":"張三1","sex":"女","age":45,"score":33,"address":"海淀區"})
 db.students.insert({"name":"張三2","sex":"男","age":3,"score":12,"address":"海淀區"})
 db.students.insert({"name":"張三3","sex":"女","age":56,"score":56,"address":"海淀區"})
 db.students.insert({"name":"張三4","sex":"男","age":12,"score":32,"address":"海淀區"})
 db.students.insert({"name":"張三5","sex":"女","age":34,"score":67,"address":"海淀區"})
 
 
db.students.find();
db.students.find({"name":"張三5"});
db.students.find({"sex":"男"});
db.students.find({"age":{$gt:18}});
db.students.find({"name":{$ne:"張三3"}});       : 查詢姓名不是張三3的資訊



--  章節2課時7資料查詢(邏輯運算)  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463003&courseId=1211033 






MongoDB之資料查詢(邏輯運算) http://blog.itpub.net/28536251/viewspace-2144294/ 
 
 
邏輯運算注意就是三種類型:與($and)、或($or),非($not,$nor)。


範例:查詢年齡在20~30歲的人員資訊
 db.emp.find({"age":{"$gte":20,"$lte":30}}).pretty();
 
 
 
db.students.find({"age":{"$gte":3,"$lte":44}});       : 查詢年齡 3-44 
db.students.find({"age":{"$ne":3}});   查詢不是年齡 3
 
查詢年齡大於3 或者成績大於30
db.students.find({"$or":[{"age":{"$gt":3}},{"score":{"$gt":30}}]});  

查詢年齡不大於3 或者不成績大於30
db.students.find({"$nor":[{"age":{"$gt":3}},{"score":{"$gt":30}}]});  

 
 
 
-- 章節2課時8資料查詢(模運算)  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463004&courseId=1211033 
 
MongoDB常用操作  https://www.cnblogs.com/andylaufzf/archive/2011/11/10/2244732.html 
 
4) 取模運算$mod
如下面的運算:


db.things.find( "this.a % 10 == 1")
 
可用$mod代替: db.things.find( { a : { $mod : [ 10 , 1 ] } } )
 
 
db.students.find({"age":{"$mod":[20,1]}})
 
 
 
 
--章節2課時9資料查詢(範圍運算)  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1462002&courseId=1211033  
 
 
mongo-查詢(2)——比較/$in/$nin/$or/$not https://www.cnblogs.com/yuechaotian/archive/2013/02/04/2891506.html 
 
 
$in & $nin


    db.tianyc02.find() db.tianyc02.find({age:{$in:[11,22]}})
 
$or   db.tianyc02.find({$or:[{age:11},{age:22}]}) db.tianyc02.find({$or:[{age:11},{name:'xttt'}]}) 
$not db.tianyc02.find({age:{$mod:[11,0]}})db.tianyc02.find({age:{$not:{$mod:[11,0]}}})  
 
 
 db.students.find({"name":{"$in":["張三4","張三5"]}})
 db.students.find({"name":{"$nin":["張三4","張三5"]}})
 
 
 
-- 章節2課時10資料查詢(陣列) http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1464003&courseId=1211033 




db.students.drop();
db.students.insert({"name":"xyt","age":19,"course":["德語","數學","政治"],"score":89});
db.students.insert({"name":"毛澤東","age":47,"course":["語文","英語","地理","數學"],"score":89});
db.students.insert({"name":"周恩來","age":56,"course":["日語","數學","政治","語文"],"score":32});
db.students.insert({"name":"村上春樹","age":24,"course":["語文","政治"],"score":89});
db.students.insert({"name":"A","age":19,"course":["語文","政治","英語"],"score":56});
db.students.insert({"name":"B","age":88,"course":["語文","政治"],"score":89});
db.students.insert({"name":"C","age":19,"course":["語文","政治","地理","英語"],"score":54});
db.students.insert({"name":"D","age":24,"course":["語文","政治"],"score":12});
db.students.insert({"name":"E","age":19,"course":["語文","政治","地理","英語"],"score":89});
db.students.find().pretty();


$all $size $slice $elemMatch 

查詢同時參加語文和數學的學生 用 "{"$all",[內容1,內容2...]}"
db.students.find({"course":{"$all":["語文","數學"]}}).pretty();

查詢陣列中第二個內容 (index=1) 的數學資訊
db.students.find({"course.1":"數學"}).pretty()

查詢只參加兩門課程的學生
db.students.find({"course":{"$size":2}}).pretty()

查詢年齡為19 但是隻顯示兩門參加課程
db.students.find({"age":19},{"course":{"$slice":2}}).pretty()

查詢年齡為19 但是隻顯示後兩門參加課程
db.students.find({"age":19},{"$course":{"$slice":-2}}).pretty()

查詢年齡為19 跳過1個 返回2個
db.students.find({"age":19},{"$course":{"$slice":[1,2]}}).pretty()




-- 章節2課時11資料查詢(巢狀集合)  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1462007&courseId=1211033 


有些學生要儲存家長資訊
db.students.drop();
db.students.insert({"name":"高大拿-A","age":19,"course":["語文","政治","地理","英語"],"parents":[
{"name":"高大拿-A(父親)","age":50,"job":"工人"},
{"name":"高大拿-A(母親)","age":48,"job":"醫生"}]});

db.students.insert({"name":"高大拿-B","age":54,"course":["語文","政治","地理","英語"],"parents":[
{"name":"高大拿-B(父親)","age":88,"job":"編輯"},
{"name":"高大拿-B(母親)","age":89,"job":"程式設計師"}]});
db.students.insert({"name":"高大拿-C","age":19,"course":["語文","政治","地理","英語"],"parents":[
{"name":"高大拿-C(父親)","age":78,"job":"董事長"},
{"name":"高大拿-C(母親)","age":47,"job":"職員"}]});


db.students.find().pretty();


這種集合判斷只能通過 $elemMatch
db.students.find({"$and":[
{"age":{"$gte":19}},
{"parents":{"$elemMatch":{"job":"編輯"}}}
]
}).pretty();



--  章節2課時12資料查詢(欄位判斷)   http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463005&courseId=1211033 


查詢具有 parents 成員的資料
db.students.find({"parents":{"$exists":true}}).pretty();

查詢不具有 parents 成員的資料
db.students.find({"parents":{"$exists":false}}).pretty();

--  章節2課時13資料查詢(where條件過濾) http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1462009&courseId=1211033



db.students.find({"$where":"this.age>20"}).pretty();
db.students.find(function(){
return this.age>20;
}).pretty();


db.students.find({"$and":[
{"$where":"this.age>19"},
{"$where":"this.age>21"}
]
}).pretty();


-- 章節2課時14資料查詢(正則運算)  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1464004&courseId=1211033






基礎語法 :{key:正則標記};
完整語法: {key:{"$regex":正則標記,"$options":選項}}

對於 options 主要是設定正則的資訊查詢的標記:
 "i":忽略字母大小寫
 "m":多行查詢
 "x":空白字元除了被轉義的或在字元類中以外的完全被忽略
 "s":匹配所有字元(圓點、".") 包括換行內容
 
 如果是使用 javascript  只能使用 i 和 m   
 
 
查詢以 "高"開頭的姓名
db.students.find({"name": /高/}).pretty();
db.students.find({"name": /a/}).pretty();
db.students.find({"name": /a/i}).pretty();
   db.students.find({"name": {"$regex":/a/i}).pretty();

查詢陣列資料 :
db.students.find({"course": /語?/}).pretty();

 
-- 章節2課時15資料查詢(資料排序) http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463007&courseId=1211033  




sort 排序 1 升序 -1 降序
db.students.find().sort({"age": -1}).pretty();

自然排序 :按照資料儲存的先後順序排序 $
db.students.find().sort({"$natural": -1}).pretty();


-- 章節2課時16資料查詢(分頁顯示) http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463008&courseId=1211033


skip(n): 跨過多少資料行
limit(n):取出的資料行的個數限制

分頁顯示:第一頁,skip(0)  limit(5)
db.students.find().skip(0).limit(5).sort({"age":-1}).pretty();

分頁現實: 第二頁 skip(5) limit(5)
db.students.find().skip(5).limit(5).sort({"age":-1}).pretty();



--  章節2課時17資料更新(更新函式) http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1464005&courseId=1211033




db.集合.update(更新條件,新的物件資料,upsert,multi);

upsert :更新的資料不存在則增加一條資料
multi: 是否只更新滿足條件的第一行資料

db.students.find().skip(5).limit(5).sort({"$natural":1}).pretty();

將第一條年齡 19 的年齡加2
db.students.update({"age":19},{"$set":{"age":21}},false,false);
將所有年齡 19 的年齡加2
db.students.update({"age":19},{"$set":{"age":21}},true,true);


更新不存在的資料
db.students.update({"age":100},{"$set":{"name":"不存在"}},true,true);


db.students.save({"age":100},{"$set":{"name":"不存在1"}});  : save 不建議使用






-- 章節2課時18資料更新(修改器) http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463010&courseId=1211033 




$inc :主要針對一個數字欄位 增加某個數字欄位的資料內容
語法: {"$inc":{"成員":"內容"}}

將所有年齡 21 學生年齡減少1 成績減30
db.students.update({"age":21},{"$inc":{"age":-1,"score":-30}},false,true);
db.students.find().pretty();

$set :進行內容重新設定
語法:{"$set":{"成員":"內容"}}
將所有年齡 20 學生年齡成績為89
db.students.update({"age":20},{"$set":{"score":30}},false,true);
db.students.find().pretty();

$unset :刪除某個成員的內容
語法:{"$unset":{"成員":1}}
刪除xyt年齡和成績資訊
db.students.update({"name":"xyt"},{"$unset":{"age":1,"score":1}});
db.students.find().pretty();

$push : 將內容追加到指定的成員中 基本上是陣列
語法:{"$push":{"成員":value}}

db.students.update({"name":"xyt"},{"$push":{"course":["物理","化學"]}});
db.students.find({"name":"xyt"}).pretty();

$pushAll : 將多個內容追加到指定的成員中 基本上是陣列
語法:{"$pushAll":{"成員":value}}

db.students.update({"name":"xyt"},{"$pushAll":{"course":["美術","音樂"]}});
db.students.find({"name":"xyt"}).pretty();

$addToSet : 向陣列中增加一個內容 只有當這個內容不存在的時候才會增加
語法:{"$addToSet":{"成員":value}}

db.students.update({"name":"xyt"},{"$addToSet":{"course":["美術","舞蹈"]}});
db.students.find({"name":"xyt"}).pretty();

$pop : 刪除陣列內的資料
語法:{"$pop":{"成員":value}} 1 表示刪除第一個 -1表示刪除最後一個

db.students.update({"name":"xyt"},{"$pop":{"course":-1}});
db.students.find({"name":"xyt"}).pretty();
db.students.update({"name":"xyt"},{"$pop":{"course":-1}});
db.students.find({"name":"xyt"}).pretty();

$pull : 刪除陣列內指定內容的資料
語法:{"$pull":{"成員":value}} 

db.students.update({"name":"xyt"},{"$pull":{"course":"音樂"}});
db.students.find({"name":"xyt"}).pretty();

$pullAll : 刪除多個內容
語法:{"$pullAll":{"成員":value}} 

db.students.update({"name":"xyt"},{"$pullAll":{"course":["音樂","數學"]}});
db.students.find({"name":"xyt"}).pretty();

$rename : 為成員名稱重新命名
語法:{"$rename":{"成員":value}} 

db.students.update({"name":"xyt"},{"$rename":{"course":"課程"}});
db.students.find({"name":"xyt"}).pretty();




--  章節2課時19資料刪除  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1462010&courseId=1211033 


刪除姓名帶有"高"的資料
db.students.remove({"name":"/高/"},true);  // 只刪一個
db.students.remove({"name":"/高/"});//都刪除
db.students.remove({});  //全刪
db.students.find({"name":"高"}).pretty();


-- 章節2課時20遊標  http://study.163.com/course/courseLearn.htm?courseId=1211033#/learn/video?lessonId=1463013&courseId=1211033
















-- 最佳的MongoDB客戶端管理工具   http://blog.csdn.net/chszs/article/details/51348248