一帜消、下載安裝
下載地址:https://www.mongodb.com/download-center?jmp=homepage#community
(一)棠枉、Windows安裝
win7及以下的用戶需要打補丁,具體步驟不再簡述泡挺,因為Windows的安裝都是傻瓜似的辈讶,如果不會裝,基本已經(jīng)可以放棄了娄猫,開個玩笑啦贱除。
記得配置環(huán)境變量啊。
(二)媳溺、linux安裝
首先下載的linux環(huán)境下的壓縮包勘伺,放到自己想要的文件夾下,
解壓命令 ------ tar -zxvf mongodb-linux-i686-3.0.4.gz
拷貝到指定目錄 ----- mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
MongoDB 的可執(zhí)行文件位于 bin 目錄下褂删,所以添加配置如下步驟飞醉,
打開配置文件 sudo vim /ect/profile
,需不需要sudo屯阀,取決于你的系統(tǒng)權限缅帘,
將其添加到PATH路徑中:
export PATH=<mongodb-install-directory>/bin:$PATH
如果你沒打開默認的27017端口,在程序中是連接不上mongoDB的难衰,
打開步驟如下:
- 修改iptables配置文件钦无,添加端口權限
sudo vim /ect/sysconfig/iptables
- 添加下面4句,開放端口
# mongoDB 開放27017盖袭,28017端口
-A INPUT -p TCP --dport 27017 -j ACCEPT
-A OUTPUT -p TCP --dport 27017 -j ACCEPT
-A INPUT -p TCP --dport 28017 -j ACCEPT
-A OUTPUT -p TCP --dport 28017 -j ACCEPT
- 寫入并退出
:wq
- 重啟服務
service iptables restart
特別注意:大坑在此
32位系統(tǒng)開機時會報這個錯誤
2017-07-10T23:53:29.234+0800 W CONTROL [main] 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
開機命令需要加上 --journal --storageEngine=mmapv1
的后綴命令失暂,因為32位的系統(tǒng)是不支持默認開機的需要自己加上
即
mongod --dbpath /root/data/db --journal --storageEngine=mmapv1
二、基本命令
基本概念
nosql不是傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)鳄虱,會有多種形式弟塞,而mongodb是其中的一個,mongoDB是一個以K-V為數(shù)據(jù)保存的數(shù)據(jù)庫拙已,而且是弱數(shù)據(jù)類型的决记。不像mysql、oracel倍踪、DB2這些老牌的結構化關系型數(shù)據(jù)庫一樣系宫,在建表時必須要制定表的結構和字段的數(shù)據(jù)類型索昂,并且建好的表只能保存制定好的數(shù)據(jù)結構。
而mongoDB沒有老數(shù)據(jù)庫的包袱扩借,它是可以保存任何數(shù)據(jù)結構的椒惨,并且在同一個集合上的每一條的記錄的數(shù)據(jù)類型都可以不同,可以輕易的擴展潮罪。而傳統(tǒng)的數(shù)據(jù)庫要在一個表上增加一個屬性時框产,則麻煩得多,需要在原有每一條記錄中插入新增的字段错洁,這就使得數(shù)據(jù)庫的擴展性有了很大的制約秉宿,因此在實際的項目當中通常都不會輕易改動表結果的。
但是傳統(tǒng)的數(shù)據(jù)庫也不是一事無成的屯碴,對于查詢要求高的項目還是傳統(tǒng)的數(shù)據(jù)庫會比較好描睦,因為結構化的數(shù)據(jù)和SQL的特性使得傳統(tǒng)數(shù)據(jù)庫的查詢操作足夠強大,適合查詢密集的項目导而,并且由于傳統(tǒng)數(shù)據(jù)庫都支持事務忱叭,所以在數(shù)據(jù)一致性這一點上,相對于NoSQL有著壓倒性的優(yōu)勢今艺,所以業(yè)務數(shù)據(jù)只能存放在傳統(tǒng)的關系型數(shù)據(jù)庫上韵丑。
而mongoDB則由于他個的可擴展性和吞吐性能,上適合存儲大量存儲的項目虚缎,如現(xiàn)在的大數(shù)據(jù)公司都是使用nosql來存儲巨量的數(shù)據(jù)的撵彻,而NoSQL則不支持事務的操作,在數(shù)據(jù)一致性上存在著明顯的缺陷实牡。因此這就注定NoSQL只能用來存放行為數(shù)據(jù)了陌僵。但是優(yōu)勢也和明顯極高的數(shù)據(jù)吞吐量,可擴展性高创坞,這也是為什么大數(shù)據(jù)公司和人工智能公司對NoSQL如此看重了碗短。
并且mongodb沒有表的概念,只有集合的概念题涨,并且集合中也能有多個集合偎谁。mongoDB本質上是存儲json的,數(shù)據(jù)就是以json為數(shù)據(jù)格式保存在文檔中纲堵。
常用命令
mongod
數(shù)據(jù)庫開機命令
--dbpath <路徑>
設置數(shù)據(jù)庫的數(shù)據(jù)源路徑巡雨,通常與上一個命令一起使用完成開機,如果是32位的系統(tǒng)婉支,還需要加上--journal --storageEngine=mmapv1
鸯隅,因為32為系統(tǒng)不會默認添加
mongo
進入mongoDB的命令行環(huán)境
show db
顯示當前所處的數(shù)據(jù)庫
show dbs
顯示所有的數(shù)據(jù)庫
use <數(shù)據(jù)庫名>
如果數(shù)據(jù)庫已存在則使用,不存在則創(chuàng)建并使用
show collections
顯示當前數(shù)據(jù)庫下的集合
db.<集合名>.find({"<key>":"<條件>"})
查詢該數(shù)據(jù)庫下符合的數(shù)據(jù)列表
db.<集合名>.insert({"<key>":"<value>"}
) 插入一條記錄
db.<未知集合名>.insert({"<key>":"<value>"}) 會在數(shù)據(jù)庫中創(chuàng)建這個集合并插入這條記錄
db.dropDataBase()
刪除數(shù)據(jù)庫
mongoimport --db <數(shù)據(jù)庫名> --collection <集合名字> --drop --file <文件名路徑>
批量導入
$gt
大于操作符
$gte
大于等于操作符
$lt
小于操作符
$lte
小于操作符
$or
或
$and
與
$type
操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型向挖,并返回結果蝌以。
類型 | 數(shù)字 | 備注 |
---|---|---|
Double | 1 | |
String | 2 | |
Object | 3 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已廢棄。 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript (with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Query with -1. |
Max key | 127 |
功能強大的 .
因為mongodb是一個鍵值對形式存儲數(shù)據(jù)的數(shù)據(jù)庫何之,也就是說value是會千變萬化的跟畅,而面對著這不規(guī)則的數(shù)據(jù)結構MongoDB是怎么處理的呢?答案是使用 “點 ”語法溶推,只要熟用點語法徊件,那么基本上如何管理數(shù)據(jù),就是小問題了蒜危。
例子:
{
"name" : "Jon Snow",
"gender" : "male",
"age" : 25,
"hobby" : ["read", "sleep", "eat", "play game"],
"transcript" : [
{
"course" : "Mathematics",
"score" : 18
},
{
"course" : "English",
"score" : 20
},
{
"course" : "Chinse",
"score" : 30
}
]
}
{
"name" : "Sansa Stark",
"gender" : "female",
"age" : 16,
"hobby" : ["read", "sleep", "eat", "play game"],
"transcript" : [
{
"course" : "Mathematics",
"score" : 40
},
{
"course" : "English",
"score" : 60
}
]
}
{
"name" : "Daenerys Targaryen",
"gender" : "male",
"age" : 22,
"hobby" : ["read", "sleep", "eat", "play game"],
"transcript" : [
{
"course" : "Mathematics",
"score" : 90
}
]
}
要通過課程名來獲取用戶信息虱痕,可以這樣寫:
db.student.find({"transcript.course": "English"})
結果會顯示Jon Snow和Sansa Stark的記錄。
多條件查詢則只需要在多個條件之間加逗號分隔即可
db.student.find({"age" : {$gt : 18}, "transcript.course" : "English"})
結果會是年齡大于18辐赞,選擇了英語課的同學Jon Snow部翘。
基礎教程就到這里了,往后還會繼續(xù)更新响委,并會結合NodeJS做一些小demo新思,認為有用的請多關注,歡迎打賞赘风。