MongoDB 數據庫 【總結筆記】

一、MongoDB 概念解析

  • 什么是MongoDB? ? 1、MongoDB是有C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統,在高負載的情況下,添加更多節點,可以保證服務器的性能 ? 2、MongoDB為web應用提供了高性能的數據存儲解決方案 ? 3、MongoDB將數據存儲為一個文檔,數據結構由(key->value)形式組層,MongoDB文檔類似于json文件,字段值可以是其他文檔,列表等

  • JSON文件

    存儲數據的一種格式

  {}:代表字典[]:列表,:分隔兩個部分::鍵值對{"code": 1,"totle": 3,"pers": [{"name":"tom1","age":18},{"name":"tom2","age":19 ? ? ? ? ? ?},{"name":"tom3","age":17 ? ? ? ? ? ?}]}
  • 特點

    1、MongoDB提供了一個面向文檔存儲,基本思路是將原來的“行”的概念換成了更加領過的“文檔”模型,一條記錄可以表示非常復雜的層次關系 2、MongoDB支持豐富的查詢表達式,查詢指令是json形式的標記,可以輕易查詢文檔中嵌套的對象和列表 3、非常容易擴展,擴展集群后還可以實現集群中的數據的負載均衡。 4、MongoDB支持各種編程語言,比如python、Java、c++、c、php、c#、ruby、JavaScript等 5、豐富的功能,包括索引、存儲JavaScript、聚合、固定集合、文件存儲等功能 6、方便管理,處理啟動數據庫服務以外,記過沒有其他什么必要的操作。管理集群只需要知道有哪個新增的節點即可,自動繼承和配置新節點

SQL術語/概念MongoDB術語/概念解釋/說明
databasedatabase數據庫
tablecollection表/集合
rowdocument行/文檔
columnfield數據字段/域
indexindex索引
table joins?表關聯/MongoDB不支持
primary keyprimary key主鍵索引/mongodb自動將_id設置為主鍵索引

二、 MongoDB創建數據庫

(1) 安裝mongoDB

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
?
#下面命令針對ubuntu16.04版本,在其他ubuntu版本系統請查看MongoDB官網
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt update
sudo apt install -y mongodb-org
?
查看服務是否啟動
pgrep mongo -l
?
#查看版本
mongo -version
?
手動啟動
mongod
或者
sudo service mongod start | stop | restart

(2) 進入 MongoDB數據庫

> mongo

?

三、 對于庫的操作 database

一個MongoDB服務器中可以建立多個數據庫,系統保留數據庫包括:

  • admin 從權限的角度考慮,這是“root”數據庫,要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限,一些特定的數據庫服務端的命令只有能從這個數據庫運行,比如列出所有的數據庫或者關閉服務

  • local 這個數據庫永遠不會被復制,用來存儲僅限于本地單臺服務器的一些集合

  • config 當MongoDB用于分片設置時,config數據庫在內部使用,用于保存分片的相關數據

數據庫命名規范:

  • 不能是空字符串("")

  • 不得含有' '(空格)、.、$、/、\和\0 (空字符)

  • 應全部小寫

(1) 創建庫

use 庫名

注意:

  1. 當use一個不存在的庫的時候 其實這個庫已經創建出來了 但是里面沒有數據 使用show dbs的時候 ,該庫不會顯示

  2. mongodb嚴格區分大小寫

  3. 數據庫名字不要用admin、local和config

在MongoDB里 不管是什么操作 都是db。

語法:db.getName() ?獲取當前的所在的庫
語法:db ? ? ?獲取當前所屬的庫

(2) 刪除數據庫

  • 刪除數據庫之前最好use一下 確定自己所在哪個庫下

    語法:db.dropDatabase()

(3) 查看所有的庫

語法:show dbs

四、 對于集合的操作 collection

集合相當于關系型數據庫中的表,但集合中的數據不必是同一種類型,可以是不同種類型。

  • 集合的名稱不能以system.開頭

  • 名稱不能是保留字

  • 名稱不能是空字符

(1) 創建集合(也就是創建表)

語法:db.createCollection('集合名稱')
示例:db.createCollection('user')  #在當前的庫里面創建一個空user集合
?
語法:db.集合名稱.insert(文檔)
示例:db.student.insert({name:'tom',age:20}) #創建一個student集合并插入了一個文檔

(2) 刪除集合

語法:db.集合名.drop()
示例:db.user.drop()  #刪除user集合

(3) 顯示所有集合

語法:show collections

五、 文檔操作

文檔是MongoDB中最核心的概念,是其核心單元,將文檔類比成關系型數據庫中的每一行數據 多個鍵及其關聯的值有序的放在一起就是文檔,MongoDB使用了Bson數據結構來存儲數據和網絡數據交換 BSON數據可以理解為在JSON的基礎上添加了一些json沒有的數據類型

MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。

?

注意:

  • 文檔的鍵/值對是有順序的

  • 文檔的鍵不能重復,如果重復,后面的會覆蓋前面的鍵

  • MongoDB區分大小寫和類型

  • 文檔中的鍵一般是字符串

文檔命名規范

  • 文檔的鍵區分大小寫

  • 文檔的鍵不要使用\0和$

5.1 插入文檔

(1) insert的插入一條文檔

語法:db.集合名.insert(文檔)
示例:db.user.insert({name:'tom',age:20})

(2) insert 插入多條文檔

語法:db.集合名.insert([文檔1,文檔2,...文檔2])
示例:db.user.insert([{name:'武大郎',age:30},{name:'和珅',age:20}])
  • 注意:如果沒有中括號 那么只會將第一條數據 插入成功

(3) save

語法:db.集合名.save(文檔)
說明:如果不指定_id字段,save()方法類似于insert()方法。如果指定_id字段,則會更新_id字段的數據
示例1:db.student.save({name:"科比", age:22,address:"洛杉磯"})
示例2:db.student.save({_id:ObjectId("59950962019723fe2a0d8d17"),name:"姚明", age:23,address:"休斯頓"})

(4)3.2版本以后 建議使用

語法:db.collection.insertOne()
示例:db.user.insertOne({name:'蕭峰',age:30})
?
語法:db.collection.insertMany()
示例:db.user.insertMany([{name:'武大郎',age:30},{name:'和珅',age:20}])

5.2 REMOVE文檔刪除

語法: 
db.collection.remove(<query>,<justOne>
)
參數說明:query:可選,刪除的文檔的條件justOne:可選,如果為true或1,則只刪除一個文檔
示例:db.user.remove({name:'武大郎'},1) #會刪除第一個匹配到的文檔db.user.remove({name:"張三"}) ? ?  #刪除多條文檔db.collection.remove({}) ?  #刪除當前集合的全部文檔
  • 3.2版本以后 建議使用

    • db.collection.deleteOne() #刪除一條文檔

    • db.collection.deleteMany() #刪除多條文檔

5.3 update 修改

語法:db.collection.update(條件,修改的操作,{upsert:bool,multi:bool}) ? 
說明:upsert:可選,如果不存在修改的記錄,是否當新數據插入,true為插入,False為不插入,默認為falsemulti:可選,默認是false,只更新找到的第一條記錄;如果為true,就按照條件查找出來的數據全部更新 
示例:$set ? 直接修改$inc ? 累加修改
db.user.update({name:"潘金蓮"},{$set:{age:20}}) ? #把name為潘金蓮的文檔的age直接改為20 ?
db.user.update({name:"潘金蓮"},{$inc:{age:20}}) #把name為潘金蓮的文檔的age加上20 
全部修改:db.user.update({name:"王五"},{$inc:{age:3}},{multi:true})
  • 3.2版本以后 建議 updateOne() 只更新一條 updateMany() 更新多條

5.4 FIND 查詢

(1) 基本查詢

語法:db.collection.find() 查詢所有
語法:db.collection.find({條件},{key:1 [,key2:1]})  按照條件來查詢  設置為1則顯示
語法:db.collection.find({條件},{key1:0[,key2:0]})  按照條件來查詢  設置為0則不顯示
?
示例:db.user.find({name:"王五"},{name:1})   #查詢所有name為王五的文檔 只顯示name的值
示例:db.user.find({name:"王五"},{name:0})   #查詢所有name為王五的文檔 顯示name鍵值對以外的所有的值
示例:db.user.find({},{key:1})     #條件是 查詢所有 只顯示某個鍵值對
  • 注意:

錯誤寫法:db.user.find({name:"王五"},{age:1,name:0}) 要么指定顯示,要么指定不顯示,不可以混合
正確寫法:db.user.find({name:"王五"},{_id:0,name:1}) #id隱藏,只顯示name的鍵值對,除了設置系統的_id 可以混搭外 其它都不可以

(2) findOne 查詢一條數據

語法:db.collection.findOne({條件},{key1:1[key:1]})
示例:db.user.findOne({name:'和珅'},{name:1})

(3) pretty 展開顯示

db.collection.find().pretty() #只有當文檔一行顯示不下(比較長的時候) 會展開顯示

(4) 統計count

db.collection.find().count()  統計所有文檔的條數
db.user.find({name:"王五"}).count() 統計滿足條件的文檔的條數

(5) 條件運算

操作符說明使用
$gt大于db.user.find({age:{$gt:30}},{age:1})年齡>30
$gte大于等于db.user.find({age:{$gte:30}},{age:1})年齡>=30
$lt小于db.user.find({age:{$lt:30}},{age:1})年齡<30
$lte小于等于db.user.find({age:{$lte:30}},{age:1})年齡<=30
鍵:值等于db.user.find({age:30})
?>= and <=db.user.find({age:{$gte:25,$lte:35}})
_id:objectId()id來查詢db.user.find({"_id" : ObjectId("5a162218fa08a5e7ad2ad09c")})
/數據/模糊查詢db.user.find({name:/李/}) 名字包含李的
/^數據/以數據作為開頭db.user.find({name:/^李/})
/數據$/以數據作為結尾db.user.find({name:/五$/})
$in在...范圍之內db.user.find({age:{$in:[23,30]}})
$nin不在...范圍之內db.user.find({name:{$nin:['王五','趙六']}})
$ne不等于db.user.find({name:{$ne:'王五'}})

(6)邏輯運算

1.and ? 邏輯與查詢
語法:db.集合名.find({條件1,條件2,……,條件n})
示例:db.user.find({name:'趙六',age:54})     查詢 name為趙六 并且 age為54的文檔db.user.find({name:"趙六",age:{$gt:40}})    查詢name為趙六 并且年齡大于40
2.or 邏輯或
語法:db.集合名.find({$or:[{條件1},{條件2},……,{條件n}]})
示例:db.user.find({$or:[{name:"王五"},{age:40}]})   查詢name為王五 或者age為40的文檔db.user.find({$or:[{name:"王五"},{name:"趙六"}]})      查詢name為王五或者趙六的所有文檔
3. and和or聯合使用
語法: db.collection.find( { 條件1,條件2,... $or:[ {條件1} , {條件2}]  })
示例:db.user.find({name:"王五",$or:[{age:30},{age:40}]})查詢name為 王五 年齡為30或者40的所有文檔
db.user.find({name:'XAD',$or:[{age:66},{age:68}]})
#name='XAD' and (age = 66 or age =68)

(7) limit 和skip

limit用法:
語法:db.collection.find().limit(num)  #取前num條數據
示例:db.user.find().limit(3) ? #取三條數據
?
skip用法
語法:db.collection.skip(num) ? #跳過num條文檔
示例:db.user.find().skip(9)  #跳過9條數據
?
skip 和 limit 配合使用  是分頁技術的基礎
語法:db.collection.find().skip(num).limit(num)
示例:db.user.find().skip(8).limit(1) ? #跳過8條數據 取1條, 其實就是實現了limit m,n

(8) 排序sort

語法:db.collection.find().sort(key:1/-1)  #按照key的升序(1)/降序(-1) ?
示例:db.user.find().sort({age:-1}) ? 按照年齡 降序顯示db.user.find().sort({age:-1}).limit(1)  #取出一條年齡最大的文檔

六、 數據庫的備份

(1) 備份

語法:mongodump -h 主機 -u 用戶名 -p 密碼 -d 數據庫 -c 集合 -o 備份目錄
示例:mongodump -d bbs -o ./  備份bbs庫到當前目錄,會生成一個和庫名相同的目錄mongodump -o ./  備份所有數據庫
導出集合為json文件:mongoexport -d bbs -c user -o ./user.json

(2) 恢復

語法:mongorestore --drop -d dir/ 恢復所有庫 ? --drop是當恢復時先把之前的數據刪除,不建議使用
語法:mongorestore -d mydbdir/ ? mydbdir就是你數據庫備份的目錄
語法:mongorestore -d mydb -c test dir/mydb/test.bson  恢復集合

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

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

相關文章

PHP 函數截圖 哈哈哈

轉載于:https://www.cnblogs.com/bootoo/p/6714676.html

python中的魔術方法

魔術方法 魔術方法就是一個類/對象中的方法&#xff0c;和普通方法唯一的不同時&#xff0c;普通方法需要調用&#xff01;而魔術方法是在特定時刻自動觸發。 1.__init__ 初始化魔術方法 觸發時機&#xff1a;初始化對象時觸發&#xff08;不是實例化觸發&#xff0c;但是和實…

2016年光伏電站交易和融資的十大猜想

1領跑者計劃備受關注&#xff0c;競價上網或從試點開始 領跑者計劃規模大&#xff0c;上網條件好&#xff0c;又有政府背書&#xff0c;雖說價格也不便宜&#xff0c;但省去很多隱性成本&#xff0c;對于致力于規模化發展的大型企業來說仍是首要選擇。同時&#xff0c;從能源管…

loading gif 透明_搞笑GIF:有這樣的女朋友下班哪里都不想去

原標題&#xff1a;搞笑GIF&#xff1a;有這樣的女朋友下班哪里都不想去這樣的廣場舞看著不涼快嗎&#xff1f;大哥慢點&#xff0c;機器經受不住你這樣的速度求孩子的心里陰影面積生孩子就是用來玩的。有這樣的媳婦做飯&#xff0c;下班哪里也不想去1.領導在門外用門夾核桃&am…

Redis數據庫 【總結筆記】

一、NoSql&#xff08;非關系型數據庫&#xff09; NoSQL&#xff1a;NoSQL Not Only SQL 非關系型數據庫 ? NoSQL&#xff0c;泛指非關系型的數據庫。隨著互聯網web2.0網站的興起&#xff0c;傳統的關系數據庫在應付web2.0網站&#xff0c;特別是超大規模和高并發的SNS類型…

基于IP的H.264關鍵技術

一、 引言 H.264是ITU-T最新的視頻編碼標準&#xff0c;被稱作ISO/IEC14496-10或MPEG-4 AVC&#xff0c;是由運動圖像專家組(MPEG)和ITU的視頻編碼專家組共同開發的新產品。H.264分兩層結構&#xff0c;包括視頻編碼層和網絡適配層。視頻編碼層處理的是塊、宏塊和片的數據&…

“光伏進社區” 應及早謀劃布局

所謂“光伏進社區”就是全國城鄉居民家庭大批量的利用家庭光伏系統&#xff0c;甚至出現光伏的社區化聯網交換、合作等更深入的活動。雖然“光伏進社區”還有很長的路要走&#xff0c;但“光伏進社區”的各種經濟、技術、社會條件正越來越向有利方向發展。 城鄉居民集聚社區是光…

python中的裝飾器和抽象類

裝飾器和抽象類 裝飾器就是對函數或者方法或者類進行修飾 #第一步&#xff1a;創建一個普通函數 def laxi():print(噗哧噗哧噗哧噗哧&#xff5e;&#xff5e;&#xff5e;)#調用函數 laxi() laxi()#第二步&#xff1a;擴展函數的功能(不是裝飾器) #聲明一個擴展函數 def deco…

eigen庫安裝_OpenCV+Eigen上位機程序移植(七十一)

1、給硬盤分區現在小伙伴們對于給電腦硬盤分區想必比較頭疼&#xff0c;給電腦硬盤分區分為兩種情況&#xff0c;一是在安裝系統之前給系統硬盤分區&#xff0c;二是在安裝系統之后給硬盤分區&#xff0c;我們現在購買的品牌機和筆記本的用戶比較多&#xff0c;而且筆記本和品牌…

【實戰操作】使用FFmpeg將一個視頻文件中音頻合成到另一個視頻中 只需三秒

直接進入主題 主要參數&#xff1a; -i——設置輸入文件名。-f——設置輸出格式。-y——若輸出文件已存在時則覆蓋文件。-fs——超過指定的文件大小時則結束轉換。-t——指定輸出文件的持續時間&#xff0c;以秒為單位。-ss——從指定時間開始轉換&#xff0c;以秒為單位。-t從…

蘋果依舊強大 物聯網領域舉足輕重

近幾天科技界最火爆的話題就是蘋果和谷歌兩家公司&#xff0c;一是蘋果發布財報&#xff0c;二是谷歌人工智能圍棋戰勝歐洲冠軍以及谷歌母公司Alphabet或將超越蘋果&#xff0c;成為世界上市值最大的公司。而在我眼里&#xff0c;未來五年內依然屬于蘋果。回顧下蘋果公司公布的…

linux之SQL語句簡明教程---SUBSTRING

SQL 中的 substring 函數是用來抓出一個欄位資料中的當中一部分。這個函數的名稱在不同的資料庫中不全然一樣&#xff1a; MySQL: SUBSTR( ), SUBSTRING( )Oracle: SUBSTR( )SQL Server: SUBSTRING( )最經常使用到的方式例如以下 (在這里我們用 SUBSTR( ) 為例)&#xff1a; SU…

H.264/AVC技術進展及其務實發展策略思考

隨著NGN、3G及3G演進和NGBW等對視頻、多媒體業務與網絡應用的飛速發展需求&#xff0c;作為視頻業務及存儲應用核心技術的高效率 視頻數字壓縮編(譯碼)技術&#xff0c;愈來愈引起人們的關注&#xff0c;成為目前廣播、視頻與多媒體通信領域中的亮點與熱點。制定視頻編碼標準的…

python中錯誤和異常處理

錯誤和異常處理 在python中一共有2種錯誤&#xff1a;一種是語法錯誤&#xff0c;另外一種是異常。 語法錯誤 語法錯誤也叫做解析錯誤&#xff0c;是指python無法正確的識別代碼的造成的。根本原因在于人的行為&#xff1a;手殘&#xff0c;腦殘和眼殘的行為。 解決方法&#x…

listview 每行后面的小箭頭_主臥帶小衣帽裝修,這幾個裝修方案,你喜歡哪個?...

南京裝修交流圈 - 知乎?www.zhihu.com現在大部分人購買的房子面積還是普遍偏小的&#xff0c;每行每業都有自己的服裝講究&#xff0c;不同的場地、見不同的人等等。家中能有一個衣帽間自然也就是心中所向往和追求的。能夠有獨立的一個房間來做衣帽間當然更好&#xff0c;今天…

【養成好習慣】使用pipreqs導出本項目使用的環境

pipreqs pipreqs可以幫你找到當前項目的所有組件及其版本。就是當別人給你一個程序的時候&#xff0c;你要在自己電腦上運行起來&#xff0c;就需要安裝程序所依賴的組件&#xff0c;總不能自己一個一個找吧。 # 安裝 pip install -i https://pypi.tuna.tsinghua.edu.cn/simpl…

開放醫療交通大數據技術 服務于公共便民領域

孫丕恕還建議&#xff0c;交通擁堵的數據也可以開放&#xff0c;孫丕恕介紹&#xff0c;目前已有導航軟件有部分數據&#xff0c;但還有些滯后&#xff0c;如果能夠做到實時更新數據&#xff0c;那么也可以為出行者避開擁堵&#xff0c;節約時間。此外&#xff0c;如果二手車的…

Nagios_在不同平臺下的安裝

Nagios 是一款開源的免費網絡監視工具&#xff0c;致力于打造符合行業標準的 IT 基礎架構的監控系統。Nagios 提供了服務器、網絡和應用的完整的 IT 監控和報警&#xff0c;可以有效監控 Windows、Linux 和 Unix 的主機狀態&#xff0c;以及交換機、路由器、打印機等網絡設備。…

python中的模塊和包

模塊和包 一個模塊就是一個包含python代碼的文件。一個文件就是一個模塊 為什么要使用模塊 1.現在程序開發文件比較大&#xff0c;都放在一個文件中維護不方便&#xff0c;拆分成多個文件方便維護與管理 2.模塊可以增加代碼的重用率 3.模塊可以當作命名空間如何定義自己的模塊 …

2005年全球H.264編解碼器薈萃

2005年全球H.264編解碼器薈萃videosky.9126.com Peter Lee 2005-0920【摘要】H.264/AVC作為最新的視頻編碼標準&#xff0c;研究領域和產業界都非常看好該標準。尤其是產業界&#xff0c;針對H.264的軟硬件編解碼器可謂是百花齊放、百家爭鳴。本文中&#xff0c;筆者對2005年全…