簡介(https://www.mongodb.com/)
-
MongoDB是為了快速開發(fā)互聯(lián)網(wǎng)Web應(yīng)用而設(shè)計(jì)的數(shù)據(jù)庫系統(tǒng); -
MongoDB的設(shè)計(jì)目標(biāo)是極簡、靈活、作為Web應(yīng)用棧的一部分; -
MongoDB的數(shù)據(jù)模型是面向文檔的,所謂文檔是一種類似于JSON的結(jié)構(gòu),簡單理解MongoDB這個(gè)數(shù)據(jù)庫中存的各種各樣的JSON(BSON,比普通的JSON的功能要更加的強(qiáng)大); -
MongoDB是一個(gè)NoSQL(Not Only SQL)的數(shù)據(jù)庫(非關(guān)系型數(shù)據(jù)庫); -
MongoDB數(shù)據(jù)庫使用的是javaScript進(jìn)行操作的,在MongoDB含有一個(gè)對ES標(biāo)準(zhǔn)實(shí)現(xiàn)的引擎,在MongoDB中所有ES中的語法中都可以使用。
安裝及啟動(dòng)
安裝
-
下載
- 下載地址:https://www.mongodb.org/dl/win32/
- 偶數(shù)版本為穩(wěn)定版,奇數(shù)版本為開發(fā)版
- 3.2版本后不支持32位系統(tǒng)
安裝
-
配置環(huán)境變量
C:\Program Files\MongoDB\Server\3.4\bin -
在
c盤根目錄- 創(chuàng)建一個(gè)文件夾
data - 在
data中創(chuàng)建一個(gè)文件夾db
- 創(chuàng)建一個(gè)文件夾
啟動(dòng)
基本操作
| 操作 | 命令 |
|---|---|
| 啟動(dòng)服務(wù)器 | mongod --dbpath 路徑 --port 端口號 |
| 啟動(dòng)客戶端 | mongo |
手動(dòng)啟動(dòng)
-
打開
cmd命令行窗口輸入
mongod啟動(dòng)mongodb服務(wù)器。-
安裝32位注意:
啟動(dòng)服務(wù)器時(shí),需要輸入如下內(nèi)容:
mongod --storageEngine=mmapv1- 該
cmd窗口不可關(guān)閉
-
-
再打開一個(gè)
cmd窗口輸入
mongo連接mongodb(啟動(dòng)客戶端),出現(xiàn)>,則啟動(dòng)成功。
后臺(tái)啟動(dòng)
? 將MongoDB設(shè)置為系統(tǒng)服務(wù),可以自動(dòng)在后臺(tái)啟動(dòng),不需要每次都手動(dòng)啟動(dòng)。
在
c盤根目錄創(chuàng)建data,并在在data下創(chuàng)建db和log文件夾-
在
bin所在目錄C:\Program Files\MongoDB\Server\3.4下添加一個(gè)配置文件mongod.cfgsystemLog: destination: file path: c:\data\log\mongod.log storage: dbPath: c:\data\db 以管理員的身份打開命令行窗口
-
執(zhí)行如下的命令
sc.exe create MongoDB binPath= "\"mongod的bin目錄\mongod.exe\" --service --config=\"mongo的安裝目錄\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"例如:
sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.4\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" 啟動(dòng)
mongodb服務(wù)-
如果啟動(dòng)失敗,證明上邊的操作有誤:
- 在控制臺(tái)輸入
sc.exe delete MongoDB刪除之前配置的服務(wù) - 重復(fù)上述1-5步驟
- 在控制臺(tái)輸入
-
錯(cuò)誤碼1053解決方法:
-
cmd刪除之前配置的服務(wù)
sc.exe delete MongoDB-
cmd輸入
"C:/Program Files/MongoDB/Server/3.4/bin/mongod.exe" --bind_ip 127.0.0.1 --logpath "c:/data/log/mongod.log" --logappend --dbpath "c:/data" --directoryperdb --serviceName MongoDB --install-
cmd啟動(dòng)服務(wù)
net start MongoDB -
安裝可視化管理工具
? 下載地址:https://www.mongodbmanager.com/download
CRUD操作
完整操作詳見:https://docs.mongodb.com/manual/reference/operator/
基本操作
| 操作 | 命令 |
|---|---|
| 進(jìn)入指定的數(shù)據(jù)庫 | use 數(shù)據(jù)庫 |
| 顯示所有的數(shù)據(jù)庫 | show dbs |
| 顯示數(shù)據(jù)庫中所有的集合 | show collections |
| 顯示當(dāng)前所在的數(shù)據(jù)庫 | db |
備注:
- 當(dāng)我們創(chuàng)建文檔時(shí),如果文檔所在的集合或數(shù)據(jù)庫不存在會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫和集合。
插入文檔
| 操作 | 命令 | 備注 |
|---|---|---|
| 向集合中插入一個(gè)或多個(gè)文檔 | db.<collection>.insert() | 傳入對象或數(shù)組 |
| 向集合中插入一個(gè)文檔 | db.<collection>.insertOne() | 傳入對象 |
| 向集合中插入多個(gè)文檔 | db.<collection>.insertMany() | 傳入數(shù)組 |
備注:
- 當(dāng)向幾何中插入文檔時(shí),如果沒有給文檔指定
_id屬性,則數(shù)據(jù)庫會(huì)自動(dòng)為文檔添加_id屬性,該屬性用來作為文檔的唯一標(biāo)識(shí)(根據(jù)時(shí)間戳及機(jī)器碼生成,確保唯一) -
<collection>表示集合名,下同
查詢文檔
| 操作 | 命令 | 備注 |
|---|---|---|
| 查詢所有符合條件的文檔 | db.<collection>.find() | 接收一個(gè)對象作為參數(shù):<br />{}表示查詢集合中所有的文檔<br />{屬性:值}查詢屬性是指定值的文檔<br />返回的是一個(gè)數(shù)組 |
| 查詢第一個(gè)符合條件的文檔 | db.<collection>.findOne() | 返回的是一個(gè)對象 |
| 獲取查詢結(jié)果的數(shù)量 | db.<collection>.find().count() | 返回?cái)?shù)值 |
| 設(shè)置顯示數(shù)據(jù)上限 | db.<collection>.find().limit() | |
| 跳過指定數(shù)量數(shù)據(jù) | db.<collection>.find().skip() | |
| 指定文檔排序規(guī)則 | db.<collection>.find().sort() | 需要傳遞對象來指定排序規(guī)則:<br />1表示升序<br />-1表示降序 |
| 設(shè)置查詢結(jié)果的投影 | db.<collection>.find({},{attr:1,_id:0}) | 在第二個(gè)參數(shù)位置設(shè)置查詢結(jié)果:<br />1表示顯示<br />0表示不顯示 |
備注:
skip()和limit()書寫先后順序?qū)Y(jié)果無影響(先執(zhí)行skip()后執(zhí)行limit())。
查詢條件
| 功能 | 命令 | 例子 |
|---|---|---|
| 通過內(nèi)嵌文檔對文檔進(jìn)行查詢 | {“文檔名.文檔名”:值} | db.mans.find({"hobby.movies":"love"}) |
| 查詢大于條件 | $gt | db.mans.find({age:{$gt:20}}) |
| 查詢小于條件 | $lt | db.mans.find({age:{$lt:20}}) |
| 查詢大于等于條件 | $gte | db.mans.find({age:{$gte:20}}) |
| 查詢小于等于條件 | $lte | db.mans.find({age:{$lte:20}}) |
修改文檔
| 操作 | 命令 | 備注 |
|---|---|---|
| 修改、替換集合中的一個(gè)或多個(gè)文檔 | db.<collection>.update(查詢條件,新對象,配置項(xiàng)) | 默認(rèn)情況下會(huì)使用新對象來替換舊對象<br />需要使用修改操作符修改指定屬性<br />默認(rèn)只會(huì)修改一個(gè),第三個(gè)參數(shù)對象中muti屬性值改為true則變?yōu)樾薷亩鄠€(gè) |
| 修改集合中的一個(gè)文檔 | db.<collection>.updateOne() | 只會(huì)修改一個(gè) |
| 修改集合中的多個(gè)文檔 | db.<collection>.updateMany() | 只會(huì)修改多個(gè) |
| 替換集合中的一個(gè)文檔 | db.<collection>.replaceOne() |
修改操作符
| 功能 | 操作符 | 例子 |
|---|---|---|
| 修改文檔中指定屬性 | $set | db.mans.update({name: 'Tom'},{$set: {age:23}}) |
| 刪除文檔中指定屬性 | $unset | db.mans.update({name: 'Tom'},{$unset: {age:23}}) |
| 數(shù)組添加一個(gè)新元素 | $push | db.mans.update({name: 'Tom'},{$push:{"hobby.movies":"love"}}) |
| 數(shù)組添加一個(gè)新元素(已存在則不會(huì)添加) | $addToSet | db.mans.update({name: 'Tom'},{$addToSet:{"hobby.movies":"love"}}) |
刪除文檔
| 操作 | 命令 | 備注 |
|---|---|---|
| 刪除集合中的一個(gè)或多個(gè)文檔 | db.<collection>.remove(查詢條件,配置項(xiàng)) | 默認(rèn)刪除多個(gè),第二個(gè)參數(shù)傳入true則變?yōu)橹粍h除一個(gè)<br />可以根據(jù)條件刪除文檔,傳遞條件方式與find()相同 |
| 刪除集合中的一個(gè)文檔 | db.<collection>.deleteOne() | 刪除一個(gè) |
| 刪除集合中的多個(gè)文檔 | db.<collection>.deleteMany() | 刪除多個(gè) |
| 清空一個(gè)集合 | db.<collection>.remove({}) | 刪除所有,性能略差 |
| 刪除一個(gè)集合 | db.<collection>.drop() | |
| 刪除一個(gè)數(shù)據(jù)庫 | db.dropDatabase() |
備注:
一般會(huì)在數(shù)據(jù)庫的數(shù)據(jù)中添加一個(gè)字段,用來表示數(shù)據(jù)是否被刪除(0為未刪除,1為刪除),很少真正將數(shù)據(jù)刪除。