MongoDB的使用
今天來學習一個新的資料庫,叫做MongoDB資料庫,我們先來了解一下MongoDB資料庫的概念,再一起學習如何使用MongoDB資料庫吧~
MongoDB的概念
-
MongoDB是專為 可擴充套件性、高效能和高可用性 而設計的資料庫,MongoDB的庫中由一個或多個collections組成,這裡的collection相當於關係型資料庫中的表;
-
MongoDB中的記錄是一個document文件,它是由欄位和值對組成的資料結構,MongoDB文件類似於JSON物件,欄位的值可以包括其他文件,陣列和文件陣列;
-
MongoDB支援的資料型別有: Int、Double, String, Object, Array, Binary data, Undefined, Boolean, Date, Null 等;
MongoDB的命令介紹
db.help() 檢視庫級別的命令
db.mycoll.help() 檢視collection級別的命令
sh.help() 檢視發片的命令
rs.help() 檢視副本集的命令
help admin 檢視管理相關的命令
help connect 檢視連線到資料庫的命令
help keys keys的相關命令
help misc misc things to know
help mr 檢視mapreduce相關的命令
show dbs 檢視當前的資料庫
show collections 檢視資料庫中所有的collections
show users 當前的資料庫中有哪些使用者
show profile 顯示profile資訊,顯示效能評估工具
show logs 顯示日誌名資訊
show log [name] 顯示指定檢視對應日誌的資訊
use <db_name> 進入某庫,設定某庫為當前庫
db.foo.find() 列出當前collection中所有的document
db.foo.find( { a : 1 } ) 列出當前collection中a = 1的document
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x 設定顯示的item的行數
exit 退出Mongo shell
CRUD操作
-
db.students.insert()
:插入一條資料,預設會建立students表; -
show collections
:顯示當前的表; -
db.students.stats()
:顯示students表的資料資訊; -
db.students.find()
:查詢插入的各個欄位; -
db.students.count()
:檢視students表中有多少個document;
Collection的簡單查詢過濾操作
db.students.remove({"name": "Angle"})
# 刪除表
db.students.drop()
# 刪除當前資料庫
db.dropDatabase()
find()的高階用法
比較操作:
-
$gt
:大於;
db.students.find({age: {$gt: 10}}) age大於10
-
$gte
:大於等於;
db.students.find({age: {$gte: 20}}) age大於等於20
-
$lt
:小於;
db.students.find({age: {$lt: 30}}) age小於30
-
$lte
:小於等於;
db.students.find({age: {$lte: 40}}) age小於等於40
-
$in
:在範圍內;
db.students.find({age: {$in: [10, 20]}}) age在[10, 20]的document
-
$nin
:不在範圍內;
db.students.find({age: {$nin: [30, 40]}}) age不在[30, 40]的document
邏輯運算:
-
$or
:或運算;
db.students.find({$or: [{name: {$eq: "robby"}}, {age: {$nin: [40,50]}}]})
-
$and
:與運算; -
$not
:非運算; -
$nor:
取反運算;
元素查詢:
-
$exists
:查詢存在某欄位的document;
如查詢存在name欄位的document
db.students.find({name: {$exists: true}})
-
$mod
:取摸; -
$type
:返回指定欄位的值型別為指定型別的document;
update()的高階用法
-
$set
:更新,或插入欄位的值;
將name為Tom的這個document的age欄位的值改為20
db.students.update({name: "Tom"}, {$set: {age: 20}})
-
$unset
:刪除指定欄位;
刪除name欄位為Tom的document的age為25的欄位
db.students.update({name: "Tom"}, {$unset: {age: 25}}
-
$rename
:修改欄位名;
給name欄位為Tom的document增加一個欄位sex且值為男
db.students.update({name: "Tom"}, {$inc: {sex: "男"}})
createUser()方法
# 建立使用者
db.createUser({user:"root",pwd:"123456", roles: [{ role: "root", db: "admin" }]});
# 刪除使用者
db.system.users.remove({user:"root"});
-
方法中的
user
用於指定使用者名稱、pwd
用於設定密碼、roles
用於指定使用者的角色,可以用一個空陣列給新使用者設定空角色、db
用於指定使用者對哪個資料庫具有管理員許可權; -
createUser()方法
為資料庫建立新使用者,如果使用者已存在於資料庫中,則db.createUser()返回重複的使用者錯誤;
角色種類說明
-
資料庫使用者角色 :
read
(允許使用者讀取指定資料庫)、readWrite
(允許使用者讀寫指定資料庫 ); -
資料庫管理角色 :
dbAdmin
(允許使用者在指定資料庫中執行管理函式)、dbOwner
、userAdmin
(允許使用者向system.users集合寫入); -
叢集管理角色 :
clusterAdmin
(賦予使用者所有分片和複製集相關函式的管理許可權)、clusterManager
、clusterMonitor
、hostManager
; -
備份恢復角色 :
backup
、restore
; -
所有資料庫角色 :
readAnyDatabase
、readWriteAnyDatabase
(賦予使用者所有資料庫的讀許可權 )、userAdminAnyDatabase
(賦予使用者所有資料庫的讀寫許可權 )、dbAdminAnyDatabase
(賦予使用者所有資料庫的dbAdmin許可權); -
超級使用者角色 :
root
(超級賬號,超級許可權); -
內部角色 :
__system
;
Mongodb Index 介紹
-
MongoDB中的索引與MySQL中的索引有類似的功能,將表中的欄位新增索引,索引會將欄位做排序,依次索引能夠大大提高MongoDB的查詢能力
-
索引是特殊的資料結構,它以易於遍歷的形式儲存集合資料集的一小部分,索引儲存特定欄位或欄位集的值,按欄位值排序;
-
索引條目的排序支援有效的等式匹配和基於範圍的查詢操作;
-
MongoDB可以使用索引中的順序返回排序結果;
db.students.createIndex({name: 1})
給name欄位建立索引, 1為指定按升序建立索引,如果你想按降序來建立索引指定為-1即可
# 檢視索引
db.students.getIndexes()
# 檢視是否使用到了索引(由於MongoDB調優)
db.students.find({"name": "Angle"}).explain() # winningPlan的stage為fetch,非COLLSCAN(欄位掃描)
# 刪除索引
db.student.dropIndex("name_1")
# 給name欄位建立一個唯一鍵索引,那麼再給students表增加一條行document,且name與之前存在的document的name值相同,那麼就會報錯, 如:增加一條document
db.students.createIndex({name: 1}, {unique: true})
db.students.insert({name: "Angle"})
報錯的資訊如下:
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.students.$name_1 dup key: { : \"Angle\" }"
}
})
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908432/viewspace-2643659/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB和Redis的使用MongoDBRedis
- Mongodb使用MongoDB
- MongoDB 使用MongoDB
- mongodb的安裝以及使用MongoDB
- mongodb索引使用MongoDB索引
- MongoDB使用初探MongoDB
- mongodb資料庫使用03、python和mongodb的互動MongoDB資料庫Python
- 2020-2-17-mongodb的使用MongoDB
- 使用MongoDB 應用MongoDB
- springboot(十一):Spring boot中mongodb的使用Spring BootMongoDB
- 【Mongo】mongodb的使用者認證MongoDB
- mongodb macos 下的安裝和使用MongoDBMac
- Laravel使用MongoDB複雜的查詢LaravelMongoDB
- mongodb使用者與角色使用MongoDB
- 在 hyperf 中使用 MongoDBMongoDB
- MongoDB的mongo命令使用完整版MongoDB
- MongoDB最簡單的入門教程之二 使用nodejs訪問MongoDBMongoDBNodeJS
- 【MongoDB學習筆記】-使用 MongoDB 進行 CRUD 操作(下)MongoDB筆記
- 【MongoDB學習筆記】-使用 MongoDB 進行 CRUD 操作(上)MongoDB筆記
- MongoDB 入門教程系列之三:使用 Restful API 操作 MongoDBMongoDBRESTAPI
- MongoDB 入門教程系列之二:使用 Spring Boot 操作 MongoDBMongoDBSpring Boot
- 什麼是MongoDB?Python爬蟲為什麼使用MongoDB?MongoDBPython爬蟲
- docker安裝mongoDB及使用DockerMongoDB
- MongoDB 6.0.3 使用者管理MongoDB
- Mongodb 也有collation 與 如何使用MongoDB
- MongoDB圖形化工具的使用與java操作MongoDBJava
- MongoDB和資料流:使用MongoDB作為Kafka消費者MongoDBKafka
- mongodb和nodejs mongoose使用詳解MongoDBNodeJS
- 使用DynamoShake從dynamodb遷移到mongodbMongoDB
- .Net Core中簡單使用MongoDBMongoDB
- 使用 Docker 部署 NodeJS + MongoDB 專案DockerNodeJSMongoDB
- mongoDB的索引MongoDB索引
- 快速掌握mongoDB(三)——mongoDB的索引詳解MongoDB索引
- 使用Golang和MongoDB構建微服務GolangMongoDB微服務
- MongoDB-Studio-3T無限使用MongoDB
- MongoDB – 使用模式構建之多型模式MongoDB模式多型
- 使用mongodb、Kafka儲存mqtt訊息MongoDBKafkaMQQT
- springboot 如何使用MongoDB整合 shedlock-springSpring BootMongoDB