MongoDB Shell操作

目錄

1 數據庫操作

2 集合操作

3 文檔操作

3.1 插入文檔(insert|insertOne|insertMany)

3.2插入、刪除的循環操作

3.2?刪除文檔(remove|deleteOne|deleteMany)

3.3?更新文檔(update|save)

3.4?查詢文檔(find)

4 游標

5 索引

6 聚合



1 數據庫操作

? ? ? ? 當新創建的數據庫里沒有插入數據時,并不會被查詢到相應的信息,只有插入數據的數據庫才會顯示其相應的信息。

????????在對某個數據庫進行相關操作時,需先使用use命令選擇執行該數據庫。

#創建數據庫myDB(use命令在數據庫已存在時就是選擇執行,否則就是創建)
use myDB#查看數據庫
show dbs#選擇執行myDB數據庫
use myDB#統計數據信息
db.stats()#查看當前數據庫下的所有集合
show collections
db.getCollectionNames()#刪除當前數據庫
db.dropDatabase()

2 集合操作

🏅普通集合操作

#創建集合
db.createCollection("myCollection")  //顯式創建myCollection
sb.stu.insert({name: "jack"})        //隱式創建stu#查詢集合
show collections#查看集合的詳細信息
db.getCollectionInfos()#集合重命名
db.myCollection.renameCollection("myColl")#查看集合統計信息
db.myCollecyion.stats()#刪除集合
db.myCollection.drop()

🏅定長集合操作

#定長集合的創建
db.createCollection("myCollection",{capped:true,size:3})#判斷集合是否為定長集合
db.myCollection.isCapped()#普通集合轉定長集合
db.runCommand({convertToCapped:"stu1",size:100})

3 文檔操作

3.1 插入文檔(insert|insertOne|insertMany)

#向stu集合插入一個文檔
db.stu.insert({item: "card",qty: 15})#向stu集合插入多個文檔
db.stu.insert([{item: "card",qty: 15},{item: "card1",qty: 16},{item: "card2",qty: 17}]
)#使用變量方式插入多個文檔
document=[{item: "card",qty: 15},{item: "card1",qty: 16},{item: "card2",qty: 17}]
db.stu.insert(document)#insertOne只能用來一次插入一個文檔
#insertMany可以用來一次插入多個文檔
#具體用法與insert的一樣

3.2插入、刪除的循環操作

?💥循環插入10條數據
for(var i=1,age=20;i<=10;i++,age++)db.stu.insert({name:"jack"+i,age:age})

💥將一個集合的數據插入到另一個新建集合
db.stu1.find().forEach(function(x)){db.stu2.insert(x);}

💥循環修改集合中的文檔數據

for(var i=6;i<=10;i++)db.stu2.update({"name":["jack"+i,"tom"+i]},{$set:{"name":"tom"+i}})

3.2?刪除文檔(remove|deleteOne|deleteMany)

#刪除stu數據庫中滿足條件的所有文檔
db.stu.remove({條件})#刪除stu數據庫中滿足條件的一條文檔
db.stu.remove({條件},justOne:true)#刪除stu集合下的所有文檔
db.stu.deleteMany({})#刪除stu集合下的所有滿足條件的文檔
db.stu.deleteMany({條件})#刪除stu集合下的所有滿足條件的一條文檔
db.stu.deleteOne({條件})

3.3?更新文檔(update|save)

db.集合名.update({條件},{$set:{字段名:修改后的值}})#將stu集合中item為card的文檔中qty值修改為35
db.stu.update({item: "card"},{$set: {qty: 35}}
)#save命令進行更新
db.stu.save({"_id": 10,item: "card",qty: 35})

save與update命令的區別

  • save按_id進行匹配查找,修改的文檔若存在就進行修改,若不存在則創建該文檔并插入集合
  • update按條件匹配查找,修改的文檔若存在就進行修改,若不存在則會拋異常

3.4?查詢文檔(find)

比較條件符號事例
等于:db.stu.find({price:24})
大于$gt:db.stu.find({price:{$gt:24}})
小于$lt:db.stu.find({price:{$lt:24}})
大于等于$gte:db.stu.find({price:{$gte:24}})
小于等于$lte:db.stu.find({price:{$lte:24}})
不等于(數值)$ne:db.stu.find({price:{$ne:24}})
不等于(字符串)$not:db.stu.find({name:{$not:"《MongoDB 教程》"}})
{ , ,}db.stu.find({price:{$gt:24}},{name:"《MongoDB教程》"})
$or[{ , ,}]db.stu.find({$or:[{price:{$gt:24}},{name:"《MongoDB教程》"}]})
包含$in:db.stu.find({price:{$in:[23,24,25]}})
不包含$nin:db.stu.find({price:{$nin:[23,24,25]}})
包含元素個數$size:

tags屬性中值為數組且包含三個元素的

db.stu.find(tags:{$size:3}})

配合find使用的其它方法

#age:null不僅會匹配到age的值為null的文檔,還會匹配到不包含age這個鍵的文檔。
db.stu.find({age:null})#限制返回值
db.stu.find().limit(3)#指定跳過第幾個文檔
db.stu.find().skip(3)     //跳過第三個#查詢結果排序
查詢結果按照指定屬性升序顯示(-1降序)
db.stu.find().sort({"屬性":1})

4 游標

????????db.stu.find()返回的就是一個游標,可以聲明一個變量進行接收,它是數據遍歷過程中的內部指針,是數據讀取的接口。

????????游標使用find方法返回,故上面說到配合find方法使用的sort、limit、skip等方法也可以使用,此外還有hint方法(強制使用索引進行查詢)。

#聲明游標并進行遍歷
var cursor = db.stu.find()    //聲明游標
while (cursor.hasNext()){     //判斷游標的下一位有沒有值var doc = cursor.next();  //有值的情況下在聲明變量進行接收print(doc.name);          //print(doc);               //輸出的是一條BSON類型的數據printjson(doc);           //轉成JSON的形式輸出print(tojson(doc));       //同上一行效果
}

5 索引

? ? ? ? 什么叫索引呢?在沒有索引的情況下,用戶要是想要查詢某個文檔的話就必須掃描集合中的所有文檔,來選擇與查詢條件相匹配的文檔。然而,在有索引存在的情況下,用戶可以先查詢索引中是否有想要查詢的文檔,如果有的情況下就可以直接讀,從而節約了大量的時間。

? ? ? ? 索引的優點:提升文檔的查詢速率。相對而言,因為插入新的文檔會引起索引順序的重拍,從而會降低插入、更新的速率。

? ? ? ? MongoDB的索引基于B-tree數據結構,MySQL的索引基于B+tree數據結構。

#單索引
對stu集合中的score字段創建升序索引(-1降序)
索引名為:index1(索引名默認為字段名_1)
db.stu.createIndex({score:1},name:"index1")#復合索引
對stu集合中的score字段創建升序索引,state降序索引
db.stu.createIndex({score:1,state:-1})#唯一索引
對stu集合中的score字段創建升序唯一索引
db.stu.createIndex({score:1},{unique:true})#查詢stu集合的所有索引
db.stu.getIndexes()#查詢索引所占空間大小
db.stu.totalIndexSize()#刪除索引
索引的所有屬性都不能有所不同,否則會刪錯索引,或提示無此索引
db.stu.dropIndex({score:1})
刪除除_id索引外的所有索引
db.stu.dropIndexes()#修改索引
先刪除需要修改的索引,在創建一個修改后的索引

6 聚合

對返回的文檔進行統計分析,使用aggregate方法實現。

💥管道操作:$match(過濾)?$group(分組) $project(顯示字段) $sort(排序) $limit(限制) $skip(跳過)

💥聚合運算符: $sum(求和) $avg(均值) $min(最小值) $max(最大值) $first?$last $push

#只顯示stu集合里文檔的quantity和pnumber字段
db.stu.aggregate({$project:{quantity:1,pnumber:1,price:0}})#過濾出stu集合里price大于4.0的所有文檔
db.stu.aggregate({$match:{price:{$gt:4.0}}})#對price字段升序排列
db.stu.aggregate({$sort:{price:1}})#返回stu集合的前三個文檔并跳過第一項
db.stu.aggregate({$limit:3},{$skip:1})

分組求和的兩種方式

#管道聚合
按編號分組,并統計商品數量
db.stu.aggregate([{$group:{_id:"$pnumber",total:{$sum:"$quantity"}}}])#MapReduce
var mapFunc = function(){
emit(this.pnumber,this.quantity);
};var reduceFunc = function(key,values){
return Arrary.sum(values);
};db.stu.mapReduce(mapFunc,reduceFunc,{out:{replace:'result'}})    //創建一個集合用來接收結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535155.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MongoDB副本集、分片集的偽分布式部署(保姆級教程)

目錄 1 集群架構(概念篇) 1.1 MongoDB核心組件 1.2 主從復制 1.3 副本集 1.4 分片集 2 集群搭建 2.1 部署副本集(偽分布式) 2.2 分片集部署(偽分布式) 2.3 副本集與分片集區別 1 集群架構(概念篇) MongoDB有三種集群部署模式&#xff0c;分別是主從復制(Master-Slave)…

非關型數據庫之MongoDB

目錄 1 MongoDB簡介 1.1 初識MongoDB 1.2 MongoDB與傳統的關系型數據庫的區別 1.3 MongoDB存儲結構 1.4 BSON支持的數據類型 2 MongoDB Shell操作 3 MongoDB集群操作 1 MongoDB簡介 1.1 初識MongoDB MongoDB來源自英文單詞"Humongous”&#xff0c;譯為“龐大的”…

【手把手 腦把腦】教會你使用idea基于MapReduce的統計數據分析(從問題分析到代碼編寫)

目錄 1 編程前總分析 1.1 數據源 1.2 需要掌握的知識 1.2.1 Hadoop對比java的數據類型 1.2.2 MapReduce流程簡介 1.3.3 MapReduce流程細分 2 編碼階段 2.1 導入依賴 2.2 mapper 2.3 reducer 2.4 main 1 編程前總分析 1.1 數據源 英語,李沐,85,男,20 數學,李沐,54,男…

【細節拉滿】Hadoop課程設計項目,使用idea編寫基于MapReduce的學生成績分析系統(附帶源碼、項目文件下載地址)

目錄 1 數據源(學生成績.csv) 2 hadoop平臺上傳數據源 3 idea代碼 3.1 工程框架 3.2 導入依賴 3.3 系統主入口(menu) 3.4 六個mapreduce 3.4.1 計算每門成績的最高分、最低分、平均分(Mma) 3.4.2 計算每個學生的總分及平均成績并進行排序(Sas) 3.4.3 統計所有學生的信…

【單位換算】存儲單位(bit Byte KB MB GB TB PB EB ZB YB BB)時間單位(ms μs ns ps)長度單位(dm cm mm μm nm pm fm am zm ym)

存儲單位 相鄰單位相差2?&#xff0c;記憶時可以此類推 一字節等于八比特 1 Byte 8 bit 1KB 1024 B 2? B 1MB 1024 KB 2? B 1GB 1024 MB 2? B 1TB 1024 GB 2?? B 1PB 1024 TB 2?? B 1EB 1024 PB 2?? B 1ZB 1024 EB 2?? B 1YB 1024 ZB 2?? B 1B…

Git 的安裝、使用、分支、命令 一篇博客全都學會

目錄 1 版本控制 1.1 什么是版本控制 1.2 為什么需要版本控制 2 Git概述 2.1 Git的工作機制 2.2 分布式版本控制工具與集中式的區別 2.3 Git是如何誕生的 3 Git的安裝 4 Git常用命令 4.1 用戶簽名的設置和修改 4.2 查看用戶簽名的設置 4.3 初始化本地庫 4.4 添加、…

生成一個GitHub的token用于git推送本地庫至遠程庫

1 一步步選擇設置 2 使用鏈接直接跳轉到最后一步的設置頁 git push 的時候需要token&#xff0c;所以在GitHub上生成一個臨時的token 1 一步步選擇設置 2 使用鏈接直接跳轉到最后一步的設置頁 前提是你已經在這個瀏覽器上登陸了GitHub https://github.com/settings/tokens

都2021年了,還不會使用GitHub創建、推送、拉取、克隆遠程庫、團隊協作開發?

1 對自己的遠程庫操作 1.1 在GitHub上創建遠程庫 1.2 推送本地庫至遠程庫 1.3 拉取遠程庫到本地庫 1.4 克隆遠程倉庫到本地 2 對別人的遠程庫兩種操作方式 2.1 使用GitHub進行團隊內協作開發 2.2 使用GitHub進行跨團隊協作開發 眾所周知&#xff0c;GitHub是一個大型的國…

2021 最新 IDEA集成Gitee、Gitee遷移GitHub【圖文講解】

1 創建遠程庫 2 IDEA集成Gitee 2.1 安裝gitee插件并綁定賬號 2.2 IDEA推送本地庫至遠程庫的兩種方式 2.3 修改后推送本地庫至遠程庫 2.4 拉取遠程庫 2.5 使用IDEA克隆遠程庫 3 Gitee遷移GitHub的遠程庫的兩種方式 3.1 自己的賬戶之間遷移 3.2 使用鏈接進行遷移 3.3 強制刷…

只需五步學會Maven 3.6.1OR 3.6.3及其他版本的下載安裝與配置【圖文詳解】

第一步&#xff0c;下載并解壓縮包 ?第二步&#xff0c;配置兩個環境變量 ?第三步&#xff0c;測試是否安裝成功 ?第四步&#xff0c;指定本地倉庫的路徑 第五步&#xff0c;修改鏡像倉庫 第一步&#xff0c;下載并解壓縮包 Maven官方下載地址&#xff1a;https://mav…

只需四步完成java JDK1.8的下載安裝與配置【圖文詳解】

第一步&#xff0c;下載安裝包并安裝 第二步&#xff0c;安裝JDK 第三步&#xff0c;配置三個環境變量 第四步&#xff0c;測試是否安裝成功 第一步&#xff0c;下載安裝包并安裝 Oracle的官方下載地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#ja…

從Maven中央倉庫網站下載jar包的兩種方式,將會伴隨java后端開發者的整個職業生涯

這個肥腸重要的網站就是&#xff1a;https://mvnrepository.com/ 下面我會以mysql-connector-java-8.0.26.jar為例&#xff0c;教會你使用兩種方式下載使用jar包資源 首先在搜索欄使用全稱或者是關鍵字對jar包進行搜索 選擇你想要的版本 方式一&#xff1a;導入pom文件依賴(…

2021 使用IDEA創建并編寫你的第一個Maven項目【圖文詳解】

1 使用IDEA創建你的第一個Maven項目 2 使用IDEA編寫一個Maven項目 1 使用IDEA創建你的第一個Maven項目 新建一個空白項目 File-->New-->Project-->Empty Project 在IDEA中配置JDK 在IDEA中配置Maven 新建一個Maven模塊 在test目錄下面新建一個resources文件夾 2 使…

能讓你的Intellij IDEA 起飛的幾個設置(設置背景 字體 快捷鍵 鼠標懸停提示 提示忽略大小寫 取消單行顯示)

1 設置主題(背景圖片) 2 設置字體 2.1 設置默認的字體及其大小、行間距**墻裂推薦** 2.2 設置字體大小可以隨意改變**墻裂推薦** 3 設置鼠標懸停提示 4 提示的時候忽略大小寫**墻裂推薦** ??5 取消單行顯示tabs**墻裂推薦** 6 修改類頭的文檔注釋信息 7 設置項目文…

控制臺:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow

問題描述&#xff1a; 當我在使用IDEA 完成一個Maven項目的時候&#xff0c;在第一步的pom.xml文件導入依賴時就發生了這個問題&#xff0c;彈窗彈出Uable to import maven project 控制臺報 Unable to import maven project: See logs for details的異常。 既然人家都讓查看l…

Maven基礎教程

1 Maven簡介 2 Maven基礎概念 2.1 倉庫 2.2 坐標 3 依賴的相關知識點 4 生命周期與插件 5 使用Inteli idea完成第一個Maven項目 1 Maven簡介 Maven的本質就是一個項目管理工具&#xff0c;用于將項目開發和管理過程抽象成一個項目對象模型(project object model POM) Ma…

java實現編輯距離算法(levenshtein distance),計算字符串或者是文本之間的相似度【附代碼】

編輯距離算法其實就是&#xff0c;在規定的編輯操作(替換字符串、插入字符串、刪除字符串)中&#xff0c;經過幾步可以把一個字符串變成另一個字符串&#xff0c;而這個所需的步數就是你的編輯距離。 測試樣例&#xff1a; str1 abc str2 yabd 表里的每一個值都代表著將s…

【Java從入門到頭禿專欄 】(一)學在Java語法之前

目錄 1 初識Java 2 Java環境JDK 3 Java規范 1 初識Java Java是美國的sun(Stanford University Network)公司在1995年推出的一門計算機高級編程語言&#xff0c;雖然說當時參與開發Java的人員有好幾名&#xff0c;但是業內公認的Java之父是詹姆斯高斯林(James Gosling)。 Jav…

【Java從入門到頭禿專欄 】(二) 注釋 數據類型 變量 常量 關鍵字 標識符 運算符 輸入輸出

目錄 1 注釋 2 數據類型 3 變量與常量 4 關鍵字、標識符 5 運算符 6 鍵入值、輸出值 1 注釋 注釋就是寫在程序中對代碼進行解釋說明的文字&#xff0c;方便自己和其他人查看&#xff0c;以便大家更加容易理解程序。注釋雖然寫在程序中&#xff0c;但是并不參與程序的執行&#…

【Java從入門到頭禿專欄 】(三) 控制流程 Math Date DateFormat Calendar System BigDecimal Random

目錄 1 控制流程 2 Math類 3 Date類 4 DateFormat類 5 Calendar類(日歷類) 6 System類 7 BigDecimal類 8 Random類(隨機數) 1 控制流程 1.1 塊作用域 塊(即復合語句)就是指由若干條Java語句組成的語句&#xff0c;并用一條大括號括起來&#xff0c;并借此形式確定了變量…