MongoDb簡單使用

1.NoSQL 介紹

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是 SQL”, 它指的是非關(guān)系型的數(shù)據(jù)庫,是以 key-value形式存儲,和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫不一樣, 不一定遵循傳統(tǒng)數(shù)據(jù)庫的一些基本要求,比如說遵循 SQL 標(biāo)準(zhǔn)、ACID 屬性、表結(jié)構(gòu)等等。 NoSQL 最早被提出是在 20 世紀(jì) 80 年代,在當(dāng)時(shí)更多是強(qiáng)調(diào)的是與關(guān)系數(shù)據(jù)庫區(qū)別對待, 最近這些年被提及的更多是強(qiáng)調(diào)協(xié)助解決大數(shù)據(jù)等相關(guān)問題。 NoSQL 在大數(shù)據(jù)時(shí)代有自己的意義。

2.NoSql 和傳統(tǒng)數(shù)據(jù)庫簡單對比。

非結(jié)構(gòu)型數(shù)據(jù)庫。 沒有行、列的概念。 用 JSON 來存儲數(shù)據(jù)。(對于不會sql的人可以降低學(xué)習(xí)成本。)

3.MongoDb 介紹

MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品, 是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似 json 的 bson 格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。 Mongo 最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言, 幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。它的特點(diǎn)是高性能、 易部署、易使用, 存儲數(shù)據(jù)非常方便。

4.MongoDb 安裝

官網(wǎng)下載: https://www.mongodb.com/
我下載的是這個版本:

image.png

安裝過程可能遇到:無法安裝圖形化界面compass,導(dǎo)致安裝一直卡住??梢躁P(guān)閉窗口重新安裝,重新安裝時(shí)取消勾選安裝圖形化界面compass。

安裝完成后配置環(huán)境變量將bin路徑加入到系統(tǒng)的path 環(huán)境變量中。

打開 cmd 輸入 : mongo命令看看是否成功。如果出來下圖說明 mongodb 配置成功。

image.png

5. 使用 MongoDb

(1)先新建一個存放數(shù)據(jù)庫的文件夾, 注意:不能有中文和空格,建議不要放在 C 盤
(2)啟動 MongoDb 服務(wù)
mongod 開啟數(shù)據(jù)庫服務(wù)命令: mongod --dbpath D:\mongodb

image.png

(3)客戶端輸入命令連接服務(wù)端:mongo

image.png

6.建庫、建表、查、改、增、刪

(1)命令:use person
如果person數(shù)據(jù)庫存在,則進(jìn)入數(shù)據(jù)庫。
如果數(shù)據(jù)庫未創(chuàng)建, 那么必須創(chuàng)建一個表并插入一個數(shù)據(jù)以來創(chuàng)建該數(shù)據(jù)庫。
數(shù)據(jù)庫中不能直接插入數(shù)據(jù),只能往集合(collections)中插入數(shù)據(jù)。 不需要專門創(chuàng)建集合,只需要寫點(diǎn)語法插入數(shù)據(jù)就會創(chuàng)建集合student:
db.student.insert({“name”:”xiaoming”})

(2)命令:show dbs,可以看到所有的數(shù)據(jù)庫,包括剛才創(chuàng)建的person,前面三個是本來就有的。


image.png

(3)命令:show collections,查看數(shù)據(jù)庫中的表。還是要先進(jìn)入數(shù)據(jù)庫,下圖可看到剛才創(chuàng)建的student表。


image.png

(4)刪除數(shù)據(jù)庫與刪除表:
刪除當(dāng)前所在的數(shù)據(jù)庫:
db.dropDatabase()
刪除指定的表: db.collections_name.drop()
db.student.drop()
ps:關(guān)于如何修改數(shù)據(jù)庫名稱:https://segmentfault.com/q/1010000000694527
(5)插入(增加) 數(shù)據(jù):
db.表名.insert({"name":"zhangsan"})

(6)查詢:先列這幾條。
1、查詢所有記錄
db.student.find()
相當(dāng)于: select* from student;

2、查詢?nèi)サ艉蟮漠?dāng)前聚集集合中的某列的重復(fù)數(shù)據(jù)
db.student.distinct("name")
會過濾掉 name 中的相同數(shù)據(jù)
相當(dāng)于: select distict name from student;

3、查詢 age = 22 的記錄
db.student.find({"age": 22})
相當(dāng)于: select * from student where age = 22。

4、匹配的數(shù)據(jù)的數(shù)量:count()
db.student.find({"age": 22}).count()

明天再寫了。今天浪費(fèi)了許多時(shí)間,很難受。

更多關(guān)于查詢:

http://www.jb51.net/article/48216.htm
http://blog.csdn.net/sgear/article/details/8649550
(7)修改數(shù)據(jù)
1.查找名字叫做小明的,把年齡更改為 16 歲:
db.student.update({"name":"xiaoming"},{$set:{"age":16}})

2.更改所有匹配項(xiàng)目:
默認(rèn)下,update()只更改第一個匹配項(xiàng),但在方法傳入第三個參數(shù)為{multi: true}時(shí),可更改所有匹配項(xiàng)。
db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true})

3.完全替換, 不出現(xiàn)$set 關(guān)鍵字了: 注意

例:db.student.remove({"name": "xiaoming"});

(8)刪除數(shù)據(jù):
db.collectionsName.remove( { "borough": "Manhattan" } )
默認(rèn)下,remove()會刪除所有的匹配項(xiàng)。可傳入第二個參數(shù){justOne: true}來只刪除第一個匹配項(xiàng)。

db.student.remove( { "age": 18}, { justOne: true } )

清空表中所有數(shù)據(jù):
db.student.remove({})
刪除文檔是永久性的,不能撤銷,也不能恢復(fù)的。因此,在執(zhí)行remove()函數(shù)前先用find()命令來查看下是否正確。

7.關(guān)于ObjectId

http://www.runoob.com/mongodb/mongodb-objectid.html
MongoDB中的文檔(對象)必須有一個"_id"鍵。這個鍵的值可以是任何類型的,默認(rèn)是個ObjectId對象。

在一個集合里面,每個文檔都有唯一的"_id"值,來確保集合里面每個文檔都能被唯一標(biāo)識。

MongoDB采用ObjectId,而不是其他比較常規(guī)的做法(比如自動增加的主鍵)的主要原因,因?yàn)樵诙鄠€ 服務(wù)器上同步自動增加主鍵值既費(fèi)時(shí)又費(fèi)力。
當(dāng)需要通過"_id"來查找對象時(shí),不能直接查找,要先轉(zhuǎn)化為ObjectID對象:

var ObjectID = require('mongodb').ObjectID;
var id = new ObjectID(id);
8.Nodejs 自啟動工具 supervisor

supervisor 會不停的 watch 你應(yīng)用下面的所有文件,發(fā)現(xiàn)有文件被修改,就重新載入程序文件這樣就實(shí)現(xiàn)了部署,修改了程序文件后馬上就能看到變更后的結(jié)果。(但是當(dāng)有錯誤時(shí)還是要重新啟動。)
(1) 首先安裝 supervisor
npm install -g supervisor
(2) 使用 supervisor 代替 node 命令啟動應(yīng)用(要是命令再短點(diǎn)就更好了)


image.png

如有錯誤請斧正,感謝大家。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容