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