MongoDB 入門實戰(3)--命令行


 本文主要介紹 MongoDB 命令行的使用,使用到的軟件版本:MongoDB 5.0.5、Centos 7.6。

1、mongo 語法

mongo 命令在 bin 目錄下,用法如下:

./mongo [options] [db address] [file names (ending in .js)]

常用參數:

--host 主機
--port 端口
-u [ --username ] 用戶名
-p [ --password ] 密碼

詳細的說明可查看幫助:

./mongo -h

例子:

cd $MONGODB_HOME/bin
./mongo

2、命令

2.1、數據庫

A、切換數據庫(沒有會先創建數據庫):use DATABASE_NAME
B、刪除數據庫:db.dropDatabase():

例子:

> use testdb
> db.dropDatabase()

2.2、集合

A、創建集合

db.createCollection(name, options)

name: 集合名稱
options: 可選參數,如下所示:

字段 類型 描述
capped 布爾 是否創建固定集合;如果為 true,必須指定 size 參數。
size 數值 固定集合的大小。
max 數值 固定集合包含的最大文檔數。

B、列出集合:show collections

C、刪除集合:db.collection.drop()

例子:

> use testdb
> db.createCollection('col1')
> show collections
> db.col1.drop()

2.3、文檔

2.3.1、創建文檔

插入一個文檔:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

插入多個文檔:

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

參數說明:
document:要寫入的文檔。
writeConcern:寫入策略,是否需確認寫操作;1:需確認,0 無需確認;默認為 1。
ordered:是否按順序寫入,默認 true。

例子:

> db.col1.insertOne({name:'jack',age:20})

2.3.2、更新文檔

更新第一個匹配的文檔:

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

更新所有匹配的文檔:

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

參數說明:
filter: 查詢條件,類似 sql 的 where 條件
update: 更新的對象,可理解為 sql 的 set 子句
upsert: 可選,如果查詢不到文檔,是否插入更新的文檔;默認 false
writeConcern: 可選,寫入策略,是否需確認寫操作;1:需確認,0 無需確認
collation: 可選,排序規則
arrayFilters: 過濾器
hint: 查詢時使用索引

例子:

> db.col1.updateOne({name:'jack'},{$set:{name:'jack2',age:22}})

2.3.3、刪除文檔

刪除第一個匹配的文檔:

db.collection.deleteOne(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>,
      hint: <document|string>        // Available starting in MongoDB 4.4
   }
)

刪除所有匹配的文檔:

db.collection.deleteMany(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>
   }
)

參數說明:
filter: 查詢條件,類似 sql 的 where 條件
writeConcern: 可選,寫入策略,是否需確認寫操作;1:需確認,0 無需確認
collation: 可選,排序規則
hint: 查詢時使用索引

例子:

> db.col1.deleteOne({name:'jack2'})

2.3.4、查詢文檔

查詢第一個匹配的文檔:

db.collection.findOne(query, projection)

查詢所有匹配的文檔:

db.collection.find(query, projection)

參數說明:
query:可選,查詢條件
projection:可選,指定查詢返回的鍵

例子:

> db.col1.find()
> db.col1.find({},{_id:0})

2.3.5、條件操作符

MongoDB 與 SQL 中條件操作符的比較:

操作 格式 范例 RDBMS中的類似語句
等於 {<key>:<value>} db.col.find({"name":"jack"}).pretty() where by = 'jack'
小於 {<key>:{$lt:<value>}} db.col.find({"age":{$lt:50}}).pretty() where age< 50
小於或等於 {<key>:{$lte:<value>}} db.col.find({"age":{$lte:50}}).pretty() where age<= 50
大於 {<key>:{$gt:<value>}} db.col.find({"age":{$gt:50}}).pretty() where age> 50
大於或等於 {<key>:{$gte:<value>}} db.col.find({"age":{$gte:50}}).pretty() where age>= 50
不等於 {<key>:{$ne:<value>}} db.col.find({"age":{$ne:50}}).pretty() where age!= 50

MongoDB AND 條件:傳入多個字段,字段之間為 and 的關系。

db.col.find({key1:value1, key2:value2})

MongoDB OR 條件:通過 $or 關鍵字來實現。

db.col.find({$or: [{key1: value1}, {key2:value2}]}

例子:

> db.col1.find({name:'jack',age:{$lt:50}})  #相當於 name='jack' and age<50

> db.col1.find({age:{$lt:50},$or:[{name:'jack'},{name:'luci'}]})  #相當於 age<50 and (name='jack' or name='luci') 

2.3.6、$type 操作符

 $type 操作符用於檢索匹配的數據類型。

例子:

> db.col1.find({name:{$type:'string'}})

> db.col1.find({name:{$type:2}})

2.3.7、MongoDB skip 與 limit方法

skip 表示跳過指定數量的文檔,limit 表示讀取指定數量的文檔。

例子:

> db.col1.find().skip(1).limit(2)

2.3.8、MongoDB 排序

MongoDB 中使用 sort() 方法對數據進行排序

db.COLLECTION_NAME.find().sort({KEY:1})

1 表示升序,-1 表示降序

例子:

> db.col1.find().sort({name:1})

2.3.9、MongoDB 聚合

MongoDB 中使用 aggregate 方法來實現聚和功能:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

相應聚合的表達式如下:

表達式 描述 實例 類似 SQL
$sum 計算總和 db.col1.aggregate([{$group: {_id: "$name", num: {$sum : "$age"}}}]) select name,sum(age) from col1 group by name
db.col1.aggregate([{$group: {_id: "$name", num: {$sum : 1}}}]) select name,count(*) from col1 group by name
$avg 計算平均值 db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}}]) select name,avg(age) from col1group by name
$min 獲取最小值。 db.col1.aggregate([{$group: {_id: "$name", num: {$min: "$age"}}}]) select name,min(age) from col1group by name
$max 獲取最大值 db.col1.aggregate([{$group: {_id: "$name", num: {$max: "$age"}}}]) select name,max(age) from col1group by name
$first 獲取第一條數據 db.col1.aggregate([{$group: {_id: "$name", num: {$first: "$age"}}}])  
$last 獲取最后一條數據 db.col1.aggregate([{$group: {_id: "$name", num: {$last: "$age"}}}])  

管道的概念:

MongoDB 的聚合管道將 MongoDB 文檔在一個管道處理完畢后將結果傳遞給下一個管道處理。MongoDB 聚合中常用的操作:

$project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用於創建計算結果以及嵌套文檔。
$match:用於過濾數據,只輸出符合條件的文檔。
$limit:只返回指定的文檔數。
$skip:跳過指定的文檔數。
$group:將文檔分組,可用於數據統計。
$sort:文檔排序輸出。

例子:

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$project:{num:0}}])

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$match:{_id:'jack'}}])

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$limit:2}])

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$sort:{num:1}}])

2.4、索引

2.4.1、創建索引

db.collection.createIndex(keys, options, commitQuorum)

keys:指定創建索引的字段及索引方式(按升序創建索引還是按降序創建索引;1:升序,-1:降序)
options:可選參數
commitQuorum:確定提交的仲裁數量

可選參數如下:

參數 類型 描述
background Boolean 4.2 版本已廢棄。是否阻塞對聚合的其他操作。
unique Boolean 是否為唯一索引,默認 false。
name string 索引名稱,如果未指定,則通過拼接索引的字段名和排序方式來生成索引名稱。
sparse Boolean 如果為 true,則索引僅引用具有指定字段的文檔。默認值為 false。
expireAfterSeconds integer 設置集合的存在時間,單位為秒。
weights document 對於文本索引,指定索引權重,1 到 99999 之間,表示該索引字段相對於其他索引字段的得分權重;可以為部分或全部索引字段指定權重。
default_language string 對於文本索引,指定語言; 默認為英語。
language_override string 對於文本索引,指定覆蓋的語言,默認值為 language。

 例子:

> db.col1.createIndex({name:1})

2.4.2、查詢索引

db.collection.getIndexes()

例子:

> db.col1.getIndexes()

2.4.3、刪除索引

db.col.dropIndex(INDEX_NAME)
db.col.dropIndexes()

例子:

> db.col1.dropIndex('name_1')

> db.col1.dropIndexes()

2.5、權限

2.5.1、創建用戶

db.createUser(user, writeConcern)

user: 用戶信息
writeConcern: 可選,寫入策略,是否需確認寫操作;1:需確認,0 無需確認

例子:

> use testdb
> db.createUser({
...   user: 'test',  
...   pwd: '123456', 
...   roles:[{
...     role: 'dbOwner',  
...     db: 'testdb'  
...   }]
... })

2.5.2、更新用戶

db.updateUser(username, update, writeConcern)

username: 用戶名
update: 更新信息
writeConcern: 可選,寫入策略,是否需確認寫操作;1:需確認,0 無需確認

例子:

> db.updateUser('test',{pwd:'1234567'})

2.5.3、刪除用戶

db.dropUser(username, writeConcern)

username: 用戶名
writeConcern: 可選,寫入策略,是否需確認寫操作;1:需確認,0 無需確認

2.5.4、認證

如何數據庫開啟的權限認證(啟動時增加 --auth 參數),則需要先認證再執行相應的操作:

db.auth(<username>, <password>)


免責聲明!

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



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