1. 使用者管理
角色 | 描述 | 資料庫 |
---|---|---|
read | 資料庫讀取許可權 | * |
readWrite | 資料庫讀寫許可權 | * |
dbAdmin | 執行管理函式許可權 | * |
userAdmin | 執行使用者管理許可權 | * |
clusterAdmin | 所有分片和複製集相關函式的管理許可權 | admin |
readAnyDatabase | 所有資料庫的讀取許可權 | admin |
readWriteAnyDatabase | 所有資料庫的讀寫許可權 | admin |
userAdminAnyDatabase | 所有資料庫的userAdmin許可權 | admin |
dbAdminAnyDatabase | 所有資料庫的dbAdmin許可權 | admin |
root | 超級許可權 | admin |
# 建立使用者
db.createUser({user: "root", pwd: "root", roles:[{role:"root", db:"admin"}]})
# 查詢使用者
db.system.users.find()
開啟資料庫安全認證
security: authorization: enabled
# 認證使用者
db.auth("root", "root")
# 更新使用者
db.updateUser("root", {pwd: "123456"})
# 更改使用者密碼
db.changeUserPassword("root", "123456")
# 刪除使用者
db.dropUser("root")
2. 資料庫管理
# 建立/切換資料庫
use test
# 查詢所有資料庫
show databases
# 刪除資料庫(需要先切換到要刪除的資料庫)
db.dropDatabase()
3. 集合管理
# 建立集合
db.createCollection("col1")
# 檢視集合
show collections/tables
# 刪除集合
db.col1.drop()
4. 文件管理
# 建立文件
db.col1.insertMany([
{"name": "test", "value": "test"},
{"name": "test", "value": "test"
])
# 新增單個文件
db.col1.insertOne({"name": "test", "value": "test"})
save()
和insert()
都可用於建立文件,save()
還可用於更新文件
集合
col1
文件內容{ "_id" : ObjectId("603eef2fd702dd13f81d99de"), "name" : "calong", "age" : 19, "sex" : "M" } { "_id" : ObjectId("603eef3ed702dd13f81d99df"), "name" : "sarach", "age" : 18, "sex" : "W" } { "_id" : ObjectId("60404c486c5e206a4273fc9c"), "name" : "keras", "age" : 21, "sex" : "M" } { "_id" : ObjectId("60404c576c5e206a4273fc9d"), "name" : "Jiawen", "age" : 22, "sex" : "M" }
條件操作符 | 含義 | 語法 |
---|---|---|
$gt/$gte | 大於/大於等於 | {鍵:{$gt/$gte:值}} |
$lt/$lte | 小於/小於等於 | {鍵:{$lt/$lte:值}} |
$eq/$ne | 等於/不等於 | {鍵:{$eq/$ne:值}} |
$and | 且連線 | {鍵:{$and:[{條件}, {條件}]}} |
$or | 或連線 | {鍵:{$or:[{條件}, {條件}]}} |
$in/$nin | 包含 | {鍵:{$in/$nin:[值, 值]}} |
$type | 型別判斷符 | {鍵:{$type:值}} |
# 查詢所有文件
db.col1.find()
# 按條件查詢
db.col1.find({name: "calong"})
# 查詢指定屬性
db.col1.find({}, {_id: 0, name:1, age:1})
# 查詢符合條件的指定屬性
db.col1.find({name: "calong"}, {_id:0, name:1, age:1})
# 正則查詢
db.col1.find({name: /^Jia/})
# 條件操作符
db.col1.find({age:{$gt:20}})
# 覆蓋文件
db.col1.update({name: "calong"}, {name: "calong", age: 21, sex: "M"})
# 更新指定屬性(沒有則建立)
db.col1.update({name: "calong"}, {$set:{grade: 97}})
# $inc操作符
db.col1.update({name: "calong"}, {$inc:{grade: 1}})
# 刪除文件指定屬性
db.col1.update({name: "calong"}, {$unset:{grade: 1}})
# 陣列操作
# 向陣列中新增值(沒有則建立)
db.col1.update({name: "calong"}, {$push:{class:"Java"}})
# 從陣列尾部(1)或頭部(-1)刪除一個值
db.col1.update({name: "calong"}, {$pop:{class:1}})
# 從陣列中刪除指定的單個值
db.col1.update({name: "calong"}, {$pull:{class:"Java"}})
# 從陣列中刪除指定的多個值
db.col1.update({name: "calong"}, {$pullAll:{class:["Java"]}})
# 重新命名屬性
db.col1.update({name: "calong"}, {$rename:{class:"subject"}})
# 從符合條件的文件中刪除一個
db.col1.deleteOne({name: "Jiawen"})
# 刪除所有符合條件的文件
db.col1.deleteMany({name: "Jiawen"})
remove()
也可以用於刪除文件
# 分頁查詢(skip表示跳過幾個, limit表示查詢幾個)
db.col1.find().limit(2).skip(1)
# 排序查詢(1表示升序, -1表示降序)
db.col1.find().sort({name:1})
5. 聚合函式
# group表示分組(_id的值表示分組欄位)
# 求總條數
db.col1.aggregate([{$group: {_id: null, count: {$sum: 1}}}])
# 求和
db.col1.aggregate([{$group: {_id: null, sum: {$sum: "$age"}}}])
# 篩選(match在group之前表示分組前篩選, 在group之後表示分組時候篩選)
db.col1.aggregate([{$match: {name: /a/}}, {$group: {_id: null, sum: {$sum: "$age"}}}])
db.col1.aggregate([{$group: {_id: null, sum: {$sum: "$age"}}}, {$match: {name: /a/}}])
# 最大值
db.col1.aggregate([{$group: {_id: null, max: {$max: "$age"}}}])
# 最小值
db.col1.aggregate([{$group: {_id: null, min: {$min: "$age"}}}])
# 平均值
db.col1.aggregate([{$group: {_id: null, avg: {$avg: "$age"}}}])
# 分組並返回分組統計的資料
db.col1.aggregate([{$group: {_id: "$age", count: {$sum: 1}, names: {$push: "$name"}}}])
當前資料
{ "_id" : ObjectId("603eef2fd702dd13f81d99de"), "name" : "calong", "age" : 21, "sex" : "M", "subject" : [ "Python", "Golang" ] } { "_id" : ObjectId("603eef3ed702dd13f81d99df"), "name" : "sarach", "age" : 18, "sex" : "W", "subject" : [ "Golang", "C++" ] } { "_id" : ObjectId("60404c486c5e206a4273fc9c"), "name" : "keras", "age" : 21, "sex" : "M", "subject" : [ "JavaScript", "Rust" ] }
# 陣列欄位拆分
db.col1.aggregate({$unwind: "$subject"})
6. 索引管理
引數 | 含義 | 值 |
---|---|---|
background | 後臺執行建立過程 | true/false |
unique | 是否為唯一索引(唯一索引的欄位不能包含重複的值) | true/false |
name | 索引名稱 | “index_name” |
sparse | 只對文件中存在的欄位啟用索引(稀疏索引) | true/false |
expireAfterSeconds | 集合的生存時間TTL | 100 |
partialFilterExpression | 部分索引 | {partialFilterExpression:{條件:{欄位:值}}} |
# 建立索引(1表示升序, -1表示降序)
db.col1.createIndex({name: 1}, {background: true})
# 檢視索引
db.col1.getIndexes()
# 檢視建立索引的鍵
db.col1.getIndexKeys()
# 檢視索引大小(不加參數列示顯示總大小)
db.col1.totalIndexSize([1])
# 刪除指定索引
db.col1.dropIndex("name_1")
# 刪除所有索引(除主鍵之外)
db.col1.dropIndexes()
# 重建索引
db.col1.reIndex()
索引型別包括:
單欄位索引
交叉索引
: 為一個集合的多個欄位分別建立索引(多個單欄位索引)複合索引
: 對多個欄位聯合建立索引多KEY索引
: 陣列型別的索引
# 查詢執行計劃
db.col1.find().explain()
本作品採用《CC 協議》,轉載必須註明作者和本文連結