1. 基礎概念
在mongodb中是通過數據庫、集合、文檔的方式來管理數據,下邊是mongodb與關系數據庫的一些概念對比:
| SQL 術語/概念 | MongoDB術語/概念 | 解釋/說明 |
|---|---|---|
| database | database | 數據庫 |
| table | collection | 數據庫表/集合 |
| row | document | 數據記錄行/文檔 |
| column | field | 數據字段/域 |
| index | index | 索引 |
| table joins | 表連接(MongoDB不支持) |
|
| primary key | primary key | 主鍵,MongoDB自動在每個集合中添加_id的主鍵 |
-
一個
mongodb實例可以創建多個數據庫 -
一個數據庫可以創建多個集合
-
一個集合可以包括多個文檔。

2. 連接mongodb
mongodb的使用方式是客戶服務器模式,即使用一個客戶端連接mongodb數據庫(服務端)。
2.1 命令格式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
字段說明
| key | value |
|---|---|
| mongodb | // 固定前綴 |
| username | 賬號,可不填 |
| password | 密碼,可不填 |
| host | 主機名或ip地址,只有host主機名為必填項。 |
| port | 端口,可不填,默認27017 |
| /database | 連接某一個數據庫 |
| ?options | 連接參數,key/value對 |
# 例子
mongodb://localhost # 連接本地數據庫27017端口
mongodb://root:itcast@localhost # 使用用戶名root密碼為itcast連接本地數據庫27017端口
mongodb://localhost,localhost:27018,localhost:27019 # 連接三台主從服務器,端口為27017、27018、27019
2. 2 使用mongodb自帶的javascript shell(mongo.exe)連接
windows 版本的mongodb安裝成功,在安裝目錄下的bin目錄有mongo.exe客戶端程序

cmd狀態執行mongo.exe:

此時就可以輸入命令來操作mongodb數據庫了
3. 數據庫操作
3.1 查詢數據庫
show dbs

3.2 創建數據庫
# use 數據庫名
use DATABASE_NAME
例子:
use test02
有test02數據庫則切換到此數據庫,沒有則創建。
新創建的數據庫不顯示,需要至少包括一個集合。
3.3 刪除數據庫
db.dropDatabase()
例子:
刪除test02數據庫
- 先切換數據庫:
use test02 - 再執行刪除:
db.dropDatabase()

4 集合操作
集合相當於關系數據庫中的表,一個數據庫可以創建多個集合,一個集合是將相同類型的文檔管理起來。
4.1 創建集合
db.createCollection(name, options)
name: 新創建的集合名稱
options: 創建參數

4.2 刪除集合
db.collection.drop()
例子:
db.student.drop() # 刪除student集合

5. 文檔操作
5.1 插入文檔
mongodb中文檔的格式是json格式,下邊就是一個文檔,包括兩個key:_id主鍵和name
{
"_id" : ObjectId("5b2cc4bfa6a44812707739b5"),
"name" : "john"
}
插入命令:
db.COLLECTION_NAME.insert(document)
每個文檔默認以_id作為主鍵,主鍵默認類型為ObjectId(對象類型),mongodb會自動生成主鍵值。
例子:
db.user.insert({"name":"john","age":12})
注意:同一個集合中的文檔的key可以不相同!但是建議設置為相同的。
5.2 更新文檔
命令格式:
db.collection.update(
<query>,
<update>,
<options>
)
query:查詢條件,相當於sql語句的where
update:更新文檔內容
options:選項
5.2.1 替換文檔
將符合條件 "name":"john"的第一個文檔替換為{"name":"john","age":10}。
db.user.update({"name":"john"},{"name":"john","age":10})

5.2.2 $set修改器
使用$set修改器指定要更新的key,key不存在則創建,存在則更新。
將符合條件 "name":"john"的所有文檔更新name和age的值。
db.user.update({"name":"john"},{$set:{"name":"john","age":18}},{multi:true})
multi:false表示更新第一個匹配的文檔,true表示更新所有匹配的文檔。
5.3 刪除文檔
命令格式:
db.user.remove(<query>)
# db.表名.remove(<query>)
# query:刪除條件,相當於sql語句中的where
5.3.1 刪除所有文檔
db.user.remove({})

5.3.2 刪除符合條件的文檔
db.user.remove({"name":"john"})

5.4 查詢文檔
命令格式:
db.collection.find(query, projection)
# query:查詢條件,可不填
# projection:投影查詢key,可不填
5.4.1 查詢全部
# db.表名.find()
db.user.find()

5.4.2 查詢符合條件的記錄
查詢name等為"john"的文檔。
db.user.find({"name":"john"})

5.4.3 投影查詢
只顯示name和age兩個key,_id主鍵不顯示。
db.user.find({"name":"john"},{name:1,age:1,_id:0})

6. 用戶
6.1 創建用戶
語法格式:
mongo>db.createUser(
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]}
)
例子:
創建root用戶,角色為root
use admin
db.createUser(
{
user:"root",
pwd:"root",
roles:[{role:"root",db:"admin"}]
}
)
內置角色如下:
- 數據庫用戶角色:
read、readWrite; - 數據庫管理角色:
dbAdmin、dbOwner、userAdmin; - 集群管理角色:
clusterAdmin、clusterManager、clusterMonitor、hostManager; - 備份恢復角色:backup、restore;
- 所有數據庫角色:
readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase - 超級用戶角色:
root
| 角色 | 介紹 |
|---|---|
| read | 提供讀取所有非系統的集合(數據庫) |
| readWrite | 提供讀寫所有非系統的集合(數據庫)和讀取所有角色的所有權限 |
| dbAdmin | 提供執行管理任務的功能,例如與架構相關的任務,索引編制,收集統計信息。此角色不授予用戶和角色管理權限。 |
| dbOwner | 提供對數據庫執行任何管理操作的功能。此角色組合了readWrite,dbAdmin和userAdmin角色授予的權限。 |
| userAdmin | 提供在當前數據庫上創建和修改角色和用戶的功能。由於userAdmin角色允許用戶向任何用戶(包括他們自己)授予任何權限,因此該角色還間接提供對數據庫的超級用戶訪問權限,或者,如果作用於管理數據庫,則提供對群集的訪問權限。 |
| clusterAdmin | 提供最佳的集群管理訪問。此角色組合了clusterManager,clusterMonitor和hostManager角色授予的權限。此外,該角色還提供了dropDatabase操作。 |
| readAnyDatabase | 僅在admin 數據庫中使用,提供所有數據庫的讀權限。 |
| readWriteAnyDatabase | 盡在admin 數據庫中使用,提供所有數據庫的讀寫權限 |
| userAdminAnyDatabase | 盡在admin 數據庫中使用,提供與userAdmin相同的用戶管理操作訪問權限,允許用戶向任何用戶(包括他們自己)授予任何權限,因此該角色還間接提供超級用戶訪問權限。 |
| dbAdminAnyDatabase | 僅在admin 數據庫中使用,提供與dbAdmin相同的數據庫管理操作訪問權限,該角色還在整個群集上提供listDatabases操作。 |
| root | 盡在admin 數據庫中使用,提供超級權限 |

6.2 查詢用戶
查詢當前庫下的所有用戶:
show users

6.3 刪除用戶
語法格式:
db.dropUser("用戶名")
例子:
刪除root1用戶
db.dropUser("root1")

6.4 修改用戶
語法格式:
db.updateUser(
"<username>",
{
customData : { <any information> },
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: "<cleartext password>"
},
writeConcern: { <write concern> })
例子:
修改root用戶的角色為readWriteAnyDatabase
use admin
db.updateUser("root",{roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
6.5 修改密碼
語法格式:
db.changeUserPassword("username","newPasswd")
例子:
修改root用戶的密碼為123
use admin
db.changeUserPassword("root","123")

測試連接
mongo --host 127.0.0.1 -u "root" --authenticationDatabase "admin" -p




