最近的畢設(shè)需要用到mongoDB數(shù)據(jù)庫(kù),又把它拿出來(lái)再學(xué)一學(xué),下盤并不是很穩(wěn),所以做一些筆記,不然又忘啦.
安裝 mongoDB & mongoVUE
mongoDB: https://www.mongodb.com/download-center?jmp=nav#enterprise
mongoVUE: mongoVUE 是一個(gè)mongoDB 數(shù)據(jù)庫(kù)的可視化界面 ,官網(wǎng)被墻了. 而且企業(yè)版15天后功能受限,所以在網(wǎng)上找了個(gè)破解版的.
好了,點(diǎn)擊下載 ...
mongoDB 我下載的是archive版的, 解壓即用.
將bin 目錄配置到環(huán)境變量中 ,下面是mongoDB 一些常用的功能
mongod
開(kāi)機(jī)mongo
運(yùn)行數(shù)據(jù)庫(kù)mongoimport
導(dǎo)入數(shù)據(jù)庫(kù)mongoexport
輸出數(shù)據(jù)庫(kù)mongorestore
備份數(shù)據(jù)庫(kù)
...
好了,現(xiàn)在開(kāi)機(jī)
mongod --dbpath d:/mongodb/data
--dbpath
表示數(shù)據(jù)庫(kù)文檔所在的文件夾,也就是說(shuō) mongoDB 真的有物理文件對(duì)應(yīng)的數(shù)據(jù)庫(kù).
可以看到,已經(jīng)啟動(dòng)成功了
mongoDB 增刪改查
如果要使用這個(gè)數(shù)據(jù)庫(kù), 那就重新打開(kāi)一個(gè)終端,并且保持 mongod
進(jìn)程執(zhí)行
show dbs // 查看所有數(shù)據(jù)庫(kù)use local // 使用數(shù)據(jù)庫(kù)use test // 當(dāng)use 一個(gè)不存在的數(shù)據(jù)庫(kù), 那么就會(huì)新建一個(gè)數(shù)據(jù)庫(kù),但是 只有在插入數(shù)據(jù)后,數(shù)據(jù)庫(kù)才會(huì)被真正創(chuàng)建成功db // 查詢當(dāng)前在哪個(gè)數(shù)據(jù)庫(kù)
show collections // 顯示所有集合db.student.insert({"name":"pawn","age":12,"gender":"male"}); // 現(xiàn)在插入一條數(shù)據(jù)db.student.find() // 查詢集合
我們多插入幾條數(shù)據(jù),用來(lái)?xiàng)l件查詢,由于在mongoDb中數(shù)據(jù)是沒(méi)有格式的, 所以下面的第二條語(yǔ)句完全可行
db.student.insert({"name":"ququ","age":18,"gender":"male"}); db.student.insert({"name":"tom","age":9});
下面做一個(gè)查詢,也是采用一個(gè)對(duì)象查詢, 這對(duì)于JSer 簡(jiǎn)直太友好了
db.student.find({name:'ququ'});db.student.find({age:{$gt:12}})
刪除當(dāng)前數(shù)據(jù)庫(kù)
db.dropDateabase()
但是,通常,我們不可能一直insert 數(shù)據(jù), 所以一般使用 mongoimport
來(lái)導(dǎo)入數(shù)據(jù)庫(kù)
//student.json { "id": "0001", "name": "pawn", "age": 18, "gender": "男", "specialty": "軟件工程", "job": "前端工程師", "contact": ["5555", "aagnoag@126.com"] } { "id": "0002", "name": "jk", "age": 22, "gender": "男", "specialty": "軟件工程", "job": "全棧工程師", "contact": ["5555", "aagnoag@126.com"] } { "id": "0002", "name": "alice", "age": 20, "gender": "女", "job": "鼓勵(lì)師", "contact": ["5555", "aagnoag@126.com"] }
通過(guò)下面的命令導(dǎo)入到數(shù)據(jù)庫(kù)test 的student 集合中,注意,執(zhí)行這條命令必須要先退出mongo
mongoimport --db test --collection student --drop --file src/student.json
條件查詢
在mongoDB中, 一切都是基于對(duì)象的, 查詢也是,其刪除和更改操作也必須要先查詢才可以,所以先深入了解連接查詢.
這里舉幾個(gè)例子,條件查詢, 并 , 或 ,排序
繼續(xù)使用上面的數(shù)據(jù)庫(kù),查詢年齡大于20歲的男同學(xué).
db.student.find({"gender":"男","age":{$gt:20}})
兩個(gè)條件中的逗號(hào)就表示并,查找年齡大于 21 歲或者小于 19歲的同學(xué)
db.student.find({$or:[{age:{$gt:21}},{age:{$lt:19}}]});
查找所有的學(xué)生, 并按照姓名排序,如果姓名一樣,則按照年齡排序,1
升序,-1
降序
db.student.find().sort({"name":1,"age":1});
修改
修改里面也要條件查詢, 必須要告訴mongo, 你要修改誰(shuí)現(xiàn)在,將pawn 的年齡修改為 20歲
db.student.update({"name":'pawn'},{$set:{"age":20}})
但是,如果查詢到多條數(shù)據(jù),那么只會(huì)修改第一條,所以需要加一個(gè)參數(shù)
{multi:true}
將所有年齡為20歲的名字改為 dandy
db.student.update({"age":20},{$set:{"name":"dandy"}},{multi:true})
如果不加 $set
呢? 它會(huì)覆蓋掉原來(lái)所有數(shù)據(jù)
db.student.update({"name":'jk'},{"job":"student"});
刪除數(shù)據(jù)
刪除數(shù)據(jù)就簡(jiǎn)單了,刪除job 為student的學(xué)生
db.student.remove({"job":"student"});
但是,如果查詢到多條數(shù)據(jù),那么刪除的時(shí)候就會(huì)全部刪除,如果只刪一條, 需要加入?yún)?shù)justOne:true
刪除名為dandy 的一個(gè)人
db.student.remove({"name":"dandy"},{justOne:true})
刪除所有記錄
db.student.remove({})
好了, 關(guān)于一些API就簡(jiǎn)單學(xué)了學(xué),也懶得背,不會(huì)再去查吧
官方文檔非常詳細(xì) https://docs.mongodb.com/getting-started/shell/introduction/,不過(guò)都是英文的.
mongoDB 的文檔非常詳細(xì),所有的用法都可以在文檔中查到.
mongoVUE
下面我們看看mongoVUE ,這個(gè)破 解起來(lái)也非常簡(jiǎn)單,有需要也可以發(fā)我郵件.
創(chuàng)建一個(gè)連接
An easy way to learn shell commands. As you use MongoVUE, corresponding shell commands are displayed here for a quick reference.
當(dāng)使用界面操作mongoDB,下面會(huì)給出相應(yīng)的命令 ,誒這就很舒服了, 很靈動(dòng) .
注意, 想要使用 mongoVUE ,也必須要使用mongod 開(kāi)機(jī)
好了,這個(gè)時(shí)候我們使用命令行插入的數(shù)據(jù)卻在mongoVUE 中怎么也找不到,經(jīng)過(guò)查詢發(fā)現(xiàn)
3.x默認(rèn)是wiredTiger 引擎,2.x默認(rèn)是mmapv1 引擎
打開(kāi)MongoDB服務(wù)器,打開(kāi)管理軟件連接到服務(wù)器,此時(shí)如果數(shù)據(jù)庫(kù)是默認(rèn)條件下打開(kāi)的,那么MongoVUE的collection列表是沒(méi)法檢測(cè)到,也沒(méi)法新建的。這是因?yàn)镸ongoDB 3.2之后默認(rèn)啟動(dòng)的是wiredTiger引擎,這個(gè)引擎和之前的引擎不同,而管理軟件匹配的還是之前的引擎,所以無(wú)法使用。
此時(shí)要重新啟動(dòng)MongoDB服務(wù)器。啟動(dòng)命令是: mongod –-storageEngine mmapv1 –-dbpath XXXXX, 其中XXXXX是你的數(shù)據(jù)庫(kù)存儲(chǔ)路徑。這樣啟動(dòng)之后,再使用MongoVUE連接數(shù)據(jù)庫(kù)服務(wù)器就可以了。
于是使用
mongod –-storageEngine mmapv1 –-dbpath D:/mongoDB/data
這樣就好了
不過(guò)還是建議使用命令行操作, 用mongoVUE 看看就可以了,因?yàn)?nodejs 的語(yǔ)法和shell 非常相似.
下面開(kāi)始講解 nodeJS如果操作mongoDB
http://www.cnblogs.com/likeFlyingFish/p/6536231.html