自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MongoDB從入門(mén)到實(shí)戰(zhàn)之MongoDB工作常用操作命令

開(kāi)發(fā)
今天我們主要是了解一下在日常工作中 MongoDB 一些常用的操作命令,主要是在Docker中的MongoDB容器中做演示,大多數(shù)命令在Navicat中也是可以直接執(zhí)行的。

今天我們主要是了解一下在日常工作中 MongoDB 一些常用的操作命令,主要是在Docker中的MongoDB容器中做演示,大多數(shù)命令在Navicat中也是可以直接執(zhí)行的。

1. 進(jìn)入創(chuàng)建的MongoDB容器

docker ps  -- 查看MongoDB容器
docker exec -it  mongo-test mongosh -- 進(jìn)入MondoDB容器中

2. 數(shù)據(jù)庫(kù)常用命令

(1) Help指令幫助

help #命令提示符
db.help() #數(shù)據(jù)庫(kù)方法幫助信息
db.mycoll.help() #集合方法幫助信息

(2) 切換/創(chuàng)建數(shù)據(jù)庫(kù)

#假如已經(jīng)存在的數(shù)據(jù)庫(kù)會(huì)直接切換到指定的數(shù)據(jù)庫(kù)
use testDb

#當(dāng)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)需要?jiǎng)?chuàng)建一個(gè)集合(table)的時(shí)候才會(huì)把數(shù)據(jù)庫(kù)持久化到磁盤(pán)中 
【可能一開(kāi)始創(chuàng)建數(shù)據(jù)庫(kù)時(shí),是在內(nèi)存中的,還沒(méi)有持久化到磁盤(pán)。新建集合時(shí),就持久化了】
use testDb
db.createCollection("mybooks")

(3) 數(shù)據(jù)庫(kù)查看

show dbs #查看所有數(shù)據(jù)庫(kù)
db 或 db.getName() #查看當(dāng)前使用的數(shù)據(jù)庫(kù)

(4) 顯示當(dāng)前db狀態(tài)

db.stats()

(5) 查看當(dāng)前db版本

db.version()

(6) 查看當(dāng)前db的連接服務(wù)器機(jī)器地址

db.getMongo()

(7) 刪除當(dāng)前使用數(shù)據(jù)庫(kù)

db.dropDatabase()

(8) 查詢(xún)之前的錯(cuò)誤信息和清除

db.getPrevError()
db.resetError()

3. Collection集合創(chuàng)建、查看、刪除

(1) 集合創(chuàng)建

db.createCollection("MyBooks")  #MyBooks集合名稱(chēng)

(2) 查看當(dāng)前數(shù)據(jù)庫(kù)中的所有集合

show collections

(3) 集合刪除

db.MyBooks.drop() #MyBooks要?jiǎng)h除的集合名稱(chēng)

4. Document文檔增刪改查

(1) 文檔插入

① insert多個(gè)文檔插入:

MongoDB使用insert() 方法向集合中插入一個(gè)或多個(gè)文檔,語(yǔ)法如下:

db.COLLECTION_NAME.insert(document)

注意:insert(): 若插入的數(shù)據(jù)主鍵已經(jīng)存在,則會(huì)拋 org.springframework.dao.DuplicateKeyException 異常,提示主鍵重復(fù),不保存當(dāng)前數(shù)據(jù)。

② 示例:

添加數(shù)據(jù)源:

[{
    name: "追逐時(shí)光者",
    phone: "15012454678"
}, {
    name: "王亞",
    phone: "18687654321"
}, {
    name: "大姚",
    phone: "13100001111"
}, {
    name: "小袁",
    phone: "131054545541"
}]

多條文檔數(shù)據(jù)插入:

db.Contacts.insert([{
    name: "追逐時(shí)光者",
    phone: "15012454678"
}, {
    name: "王亞",
    phone: "18687654321"
}, {
    name: "大姚",
    phone: "13100001111"
}, {
    name: "小袁",
    phone: "131054545541"
}])

查看插入文檔數(shù)據(jù):

db.Contacts.find()

③ insertOne一個(gè)文檔插入:

insert() 方法可以同時(shí)插入多個(gè)文檔,但如果您只需要將一個(gè)文檔插入到集合中的話,可以使用 insertOne() 方法,該方法的語(yǔ)法格式如下:

db.COLLECTION_NAME.insertOne(document)

④ 示例:

添加數(shù)據(jù)源:

{
    bookName: "平凡的世界",
    author: "路遙"
}

添加示例:

db.MyBooks.insertOne({
    bookName: "平凡的世界",
    author: "路遙"
})

(2) 文檔更新

update() 方法用于更新已存在的文檔。語(yǔ)法格式如下:

db.collection.update(    
    <query>, 
    <update>, 
    {       
        upsert: <boolean>,   
        multi: <boolean>,  
        writeConcern: <document>
    }
)

參數(shù)說(shuō)明:

  • query:update的查詢(xún)條件,類(lèi)似sql update查詢(xún)內(nèi)where后面的。
  • update:update的對(duì)象和一些更新的操作符(如$、$inc...)等,也可以理解為sql update查詢(xún)內(nèi)set后面的。
  • upsert:可選,這個(gè)參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。
  • multi:可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來(lái)多條記錄全部更新。
  • writeConcern:可選,拋出異常的級(jí)別。

示例:

更改bookName:"平方的世界"書(shū)籍名稱(chēng)改成“平方的世界”

db.MyBooks.update({'bookName':'平方的世界'},{$set:{'bookName':'平凡的世界'}})

修改成功后的結(jié)果:

(3) 文檔查詢(xún)

MongoDB 查詢(xún)數(shù)據(jù)的語(yǔ)法格式如下:

db.collection.find(query, projection)
  • query:可選,使用查詢(xún)操作符指定查詢(xún)條件
  • projection:可選,使用投影操作符指定返回的鍵。查詢(xún)時(shí)返回文檔中所有鍵值,只需省略該參數(shù)即可(默認(rèn)省略)。

如果你需要以易讀的方式來(lái)讀取數(shù)據(jù),可以使用 pretty() 方法,語(yǔ)法格式如下:

db.col.find().pretty()

pretty() 方法以格式化的方式來(lái)顯示所有文檔。

① 查詢(xún)Contacts集合中的所有數(shù)據(jù):

db.Contacts.find().pretty()

② MongoDB 與 RDBMS Where 語(yǔ)句比較:

如果你熟悉常規(guī)的 SQL 數(shù)據(jù),通過(guò)下表可以更好的理解 MongoDB 的條件語(yǔ)句查詢(xún):

③ MongoDB AND 條件:

MongoDB 的 find() 方法可以傳入多個(gè)鍵(key),每個(gè)鍵(key)以逗號(hào)隔開(kāi),即常規(guī) SQL 的 AND 條件。

語(yǔ)法格式如下:

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

④ 查詢(xún)集合(Contacts)中name="小袁" 和 phnotallow="131054545541"記錄:

db.Contacts.find({"name":"小袁", "phone":"131054545541"}).pretty()

⑤ MongoDB OR 條件:

MongoDB OR 條件語(yǔ)句使用了關(guān)鍵字 $or,語(yǔ)法格式如下:

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

查詢(xún)集合(Contacts)中name="小袁" 或 name="大姚"記錄:

db.Contacts.find({$or:[{"name":"小袁"},{"name": "大姚"}]}).pretty()

⑥ AND 和 OR 聯(lián)合使用:

以下實(shí)例演示了 AND 和 OR 聯(lián)合使用,類(lèi)似常規(guī) SQL 語(yǔ)句為: 'where age>18 AND ("name"="小袁" OR "name"="大姚")':

db.Contacts.find({"age": {$gt:18}, $or: [{"name":"小袁"},{"name": "大姚"}]}).pretty()

(4) 文檔刪除

remove() 方法的基本語(yǔ)法格式如下所示:

db.collection.remove(
    <query>,
    {
        justOne: <boolean>, writeConcern: <document>
    }
)

參數(shù)說(shuō)明:

  • query:必選項(xiàng),是設(shè)置刪除的文檔的條件。
  • justOne:布爾型的可選項(xiàng),默認(rèn)為false,刪除符合條件的所有文檔,如果設(shè)為 true,則只刪除一個(gè)文檔。
  • writeConcem:可選項(xiàng),設(shè)置拋出異常的級(jí)別。

① 根據(jù)某個(gè)_id值刪除數(shù)據(jù):

#_id為字符串的話,可以直接這樣
db.collection.remove({"_id":"你的id"});

#_id由MongoDB自己生成時(shí)
db.collection.remove({'_id':ObjectId("636680729003374f6a6c7add")})

② 移除 title 為“MongoDB”的文檔:

db.colection.remove({'title': 'MongoDB'})

5. MongoDB Limit與Skip方法

(1) Contacts集合數(shù)據(jù)展示

(2) MongoDB Limit方法

如果你需要在MongoDB中讀取指定數(shù)量的數(shù)據(jù)記錄,可以使用MongoDB的Limit方法,limit()方法接受一個(gè)數(shù)字參數(shù),該參數(shù)指定從MongoDB中讀取的記錄條數(shù)。

語(yǔ)法:

limit()方法基本語(yǔ)法如下所示:

db.COLLECTION_NAME.find().limit(NUMBER)

示例:

查詢(xún)Contacts集合中的前兩條數(shù)據(jù):

注意:如果沒(méi)有指定limit()方法中的參數(shù)則顯示集合中的所有數(shù)據(jù)。

db.Contacts.find().limit(2)

(3) MongoDB Skip方法

我們除了可以使用limit()方法來(lái)讀取指定數(shù)量的數(shù)據(jù)外,還可以使用skip()方法來(lái)跳過(guò)指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過(guò)的記錄條數(shù)。

語(yǔ)法:skip() 方法腳本語(yǔ)法格式如下:

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

示例:

查詢(xún)Contacts集合中的第2條數(shù)據(jù):

# 顯示一條如何在跳過(guò)一條
db.Contacts.find().limit(1).skip(1)

6. MongoDB排序

在MongoDB 中使用 sort() 方法對(duì)數(shù)據(jù)進(jìn)行排序,sort() 方法可以通過(guò)參數(shù)指定排序的字段,并使用 1 和 -1 來(lái)指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列。

語(yǔ)法:

sort()方法基本語(yǔ)法如下所示:

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

示例:

在Contacts集合中讓name按照降序來(lái)排列:

db.Contacts.find().sort({"name":-1})

7. MongoDB索引

(1) 說(shuō)明

  • 索引通常能夠極大的提高查詢(xún)的效率,如果沒(méi)有索引,MongoDB在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢(xún)條件的記錄。
  • 這種掃描全集合的查詢(xún)效率是非常低的,特別在處理大量的數(shù)據(jù)時(shí),查詢(xún)可以要花費(fèi)幾十秒甚至幾分鐘,這對(duì)網(wǎng)站的性能是非常致命的。
  • 索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲(chǔ)在一個(gè)易于遍歷讀取的數(shù)據(jù)集合中,索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。

(2) 語(yǔ)法

createIndex()方法基本語(yǔ)法格式如下所示:

注意:語(yǔ)法中 Key 值為你要?jiǎng)?chuàng)建的索引字段,1 為指定按升序創(chuàng)建索引,如果你想按降序來(lái)創(chuàng)建索引指定為 -1 即可。

db.collection.createIndex(keys, options)

(3) createIndex() 接收可選參數(shù),可選參數(shù)列表如下:

① 為Contacts集合中的name字段按降序設(shè)置索引:

db.Contacts.createIndex({"name":-1})

② 為Contacts集合中的name字段和phone字段同時(shí)按降序設(shè)置索引(關(guān)系型數(shù)據(jù)庫(kù)中稱(chēng)作復(fù)合索引):

db.Contacts.createIndex({"name":-1,"phone":-1})

圖片

③ 以后臺(tái)方式給Contacts集合中的phone字段按降序設(shè)置索引:

db.Contacts.createIndex({"phone": 1}, {background: true})

8. MongoDB聚合

MongoDB 中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計(jì)平均值,求和等),并返回計(jì)算后的數(shù)據(jù)結(jié)果。

類(lèi)似SQL語(yǔ)句中的 count(*)。

(1) 語(yǔ)法

aggregate() 方法的基本語(yǔ)法格式如下所示:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

(2) 首先創(chuàng)建一個(gè)BlogCollection集合,并批量插入多個(gè)文檔數(shù)據(jù):

#創(chuàng)建集合
use BolgCollection

#批量插入集合文檔數(shù)據(jù)
db.BlogCollection.insert([{
   title: '學(xué)習(xí)MongoDB', 
   description: 'MongoDB is no sql database',
   by_user: '時(shí)光者',
   likes: 100
},
{
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: '時(shí)光者',
   likes: 10
},
{
   title: 'Docker入門(mén)學(xué)習(xí)', 
   description: 'Docker入門(mén)學(xué)習(xí)教程',
   by_user: '時(shí)光者',
   likes: 100
},
{
   title: '.Net Core入門(mén)學(xué)習(xí)', 
   description: '.Net Core入門(mén)學(xué)習(xí)',
   by_user: '大姚',
   likes: 750
},
{
   title: 'Golang入門(mén)學(xué)習(xí)', 
   description: 'Golang入門(mén)學(xué)習(xí)',
   by_user: '小藝',
   likes: 750
}])

#查詢(xún)集合所有文檔數(shù)據(jù)
db.BlogCollection.find()

(3) $sum分組統(tǒng)計(jì)以上BlogCollection集合每個(gè)作者所寫(xiě)的文章數(shù):

db.BlogCollection.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

(3) 類(lèi)似于SQL語(yǔ)句:

select by_user, count(*) from BlogCollection group by by_user

(4) $sum 計(jì)算likes的總和:

db.BlogCollection.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])

(5) $avg 計(jì)算Likes的平均值:

db.BlogCollection.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])

(6) $min 獲取集合中所有文檔對(duì)應(yīng)值得最小值:

db.BlogCollection.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])

$max 獲取集合中所有文檔對(duì)應(yīng)值得最大值:

db.BlogCollection.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])

責(zé)任編輯:趙寧寧 來(lái)源: 追逐時(shí)光者
相關(guān)推薦

2025-04-22 07:52:59

2025-04-27 01:33:23

MongoDBDocker容器

2023-10-13 08:23:05

2023-01-04 07:44:09

2017-09-08 14:30:33

MongoDB安裝操作命令

2024-07-30 08:19:14

2020-06-18 14:39:42

MongoDB數(shù)據(jù)數(shù)據(jù)庫(kù)

2022-11-16 08:00:37

MongoDB阿里云的登錄

2021-11-29 14:18:05

Nuxt3靜態(tài)Nuxt2

2012-02-29 00:49:06

Linux學(xué)習(xí)

2024-10-16 15:25:15

2011-09-05 09:28:58

MySQLMongoDB

2025-05-12 10:15:00

Linuxdiff系統(tǒng)

2011-09-14 15:30:00

MongoDB

2011-04-01 09:29:52

MySQLMongoDB

2017-01-09 09:34:03

Docker容器傳統(tǒng)虛擬機(jī)

2011-03-21 13:28:14

MongoDB文件存取

2018-12-05 16:00:32

MongoDB數(shù)據(jù)庫(kù)NoSQL

2024-08-15 08:00:00

MongoDB數(shù)據(jù)庫(kù)NoSQL

2020-03-09 17:28:51

NoSQLMongoDB數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)