最近的畢設(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版的, 解壓即用.
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

將bin 目錄配置到環(huán)境變量中 ,下面是mongoDB 一些常用的功能
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

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ù).
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

可以看到,已經(jīng)啟動(dòng)成功了

mongoDB 增刪改查

如果要使用這個(gè)數(shù)據(jù)庫(kù), 那就重新打開(kāi)一個(gè)終端,并且保持 mongod 進(jìn)程執(zhí)行
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

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ù)

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

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});

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

下面做一個(gè)查詢,也是采用一個(gè)對(duì)象查詢, 這對(duì)于JSer 簡(jiǎn)直太友好了

db.student.find({name:'ququ'});db.student.find({age:{$gt:12}})

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

刪除當(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

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

條件查詢

在mongoDB中, 一切都是基于對(duì)象的, 查詢也是,其刪除和更改操作也必須要先查詢才可以,所以先深入了解連接查詢.
這里舉幾個(gè)例子,條件查詢, 并 , 或 ,排序

繼續(xù)使用上面的數(shù)據(jù)庫(kù),查詢年齡大于20歲的男同學(xué).

db.student.find({"gender":"男","age":{$gt:20}})

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

兩個(gè)條件中的逗號(hào)就表示并,查找年齡大于 21 歲或者小于 19歲的同學(xué)

db.student.find({$or:[{age:{$gt:21}},{age:{$lt:19}}]});

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

查找所有的學(xué)生, 并按照姓名排序,如果姓名一樣,則按照年齡排序,1升序,-1降序

db.student.find().sort({"name":1,"age":1});

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

修改

修改里面也要條件查詢, 必須要告訴mongo, 你要修改誰(shuí)現(xiàn)在,將pawn 的年齡修改為 20歲

db.student.update({"name":'pawn'},{$set:{"age":20}})

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

但是,如果查詢到多條數(shù)據(jù),那么只會(huì)修改第一條,所以需要加一個(gè)參數(shù) {multi:true}
將所有年齡為20歲的名字改為 dandy

db.student.update({"age":20},{$set:{"name":"dandy"}},{multi:true})

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

如果不加 $set 呢? 它會(huì)覆蓋掉原來(lái)所有數(shù)據(jù)

db.student.update({"name":'jk'},{"job":"student"});

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

刪除數(shù)據(jù)

刪除數(shù)據(jù)就簡(jiǎn)單了,刪除job 為student的學(xué)生

db.student.remove({"job":"student"});

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

但是,如果查詢到多條數(shù)據(jù),那么刪除的時(shí)候就會(huì)全部刪除,如果只刪一條, 需要加入?yún)?shù)justOne:true

刪除名為dandy 的一個(gè)人

db.student.remove({"name":"dandy"},{justOne:true})

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

刪除所有記錄

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è)連接
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

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

這樣就好了
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

不過(guò)還是建議使用命令行操作, 用mongoVUE 看看就可以了,因?yàn)?nodejs 的語(yǔ)法和shell 非常相似.

下面開(kāi)始講解 nodeJS如果操作mongoDB

http://www.cnblogs.com/likeFlyingFish/p/6536231.html