網易雲課堂\『李興華java培訓23』MongoDB資料庫\章節2課時20遊標.sql
阿新 • • 發佈:2019-01-27
更多課程請訪問: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