mongodb常用操作


1. 基礎概念

mongodb中是通過數據庫、集合、文檔的方式來管理數據,下邊是mongodb與關系數據庫的一些概念對比:

SQL 術語/概念 MongoDB術語/概念 解釋/說明
database database 數據庫
table collection 數據庫表/集合
row document 數據記錄行/文檔
column field 數據字段/域
index index 索引
table joins 表連接(MongoDB不支持)
primary key primary key 主鍵,MongoDB自動在每個集合中添加_id的主鍵
  1. 一個mongodb實例可以創建多個數據庫

  2. 一個數據庫可以創建多個集合

  3. 一個集合可以包括多個文檔。

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數據庫

  1. 先切換數據庫:use test02
  2. 再執行刪除: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"的所有文檔更新nameage的值。

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 投影查詢

只顯示nameage兩個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"}]
     }
  )

內置角色如下:

  1. 數據庫用戶角色:readreadWrite;
  2. 數據庫管理角色:dbAdmindbOwneruserAdmin
  3. 集群管理角色:clusterAdminclusterManagerclusterMonitorhostManager
  4. 備份恢復角色:backup、restore;
  5. 所有數據庫角色:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabase
    dbAdminAnyDatabase
  6. 超級用戶角色: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM