【面試虐菜】—— MongoDB知識整理

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   io   os   使用   java   

為什麼我們要使用MongoDB?

特點:

  • 高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:
  • 面向集合儲存,易儲存物件類型的資料。
  • 模式自由。
  • 支援動態查詢。
  • 支援完全索引,包含內部對象。
  • 支援查詢。
  • 支援複製和故障恢複。
  • 使用高效的位元據儲存,包括大型物件(如視頻等)。
  • 自動處理片段,以支援雲端運算層次的擴充性
  • 支援Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程式,社區中也提供了對Erlang及.NET等平台的驅動程式。
  • 檔案儲存體格式為BSON(一種JSON的擴充)。
  • 可通過網路訪問。

功能:

  • 面向集合的儲存:適合儲存物件及JSON形式的資料。
  • 動態查詢:Mongo支援豐富的查詢運算式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
  • 完整的索引支援:包括文檔內嵌對象及數組。Mongo的查詢最佳化工具會分析查詢運算式,並產生一個高效的查詢計劃。
  • 查詢監視:Mongo包含一個監視工具用於分析資料庫操作的效能。
  • 複製及自動容錯移轉:Mongo資料庫支援伺服器之間的資料複製,支援主-從模式及伺服器之間的相互複製。複製的主要目標是提供冗餘及自動容錯移轉。
  • 高效的傳統儲存方式:支援位元據及大型物件(如照片或圖片)
  • 自動分區以支援雲層級的伸縮性:自動分區功能支援水平的資料庫叢集,可動態添加額外的機器。

適用場合:

  • 網站資料:Mongo非常適合即時的插入,更新與查詢,並具備網站即時資料儲存所需的複製及高度伸縮性。
  • 緩衝:由於效能很高,Mongo也適合作為資訊基礎設施的緩衝層。在系統重啟之後,由Mongo搭建的持久化緩衝層可以避免下層的資料來源 過載。
  • 大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很多時候程式員往往會選擇傳統的檔案進行儲存。
  • 高伸縮性的情境:Mongo非常適合由數十或數百台伺服器組成的資料庫。Mongo的路線圖中已經包含對MapReduce引擎的內建支援。
  • 用於對象及JSON資料的儲存:Mongo的BSON資料格式非常適合文檔化格式的儲存及查詢。

 

 

MongoDB要注意的問題

1 因為MongoDB是全索引的,所以它直接把索引放在記憶體中,因此最多支援2.5G的資料。如果是64位的會更多。

2 因為沒有恢複機制,因此要做好資料備份

3 因為預設監聽地址是127.0.0.1,因此要進行身分識別驗證,否則不夠安全;如果是自己使用,建議配置成localhost主機名稱

4 通過GetLastError確保變更。(這個不懂,實際中沒用過

 

MongoDB結構介紹

MongoDB中儲存的對象時BSON,是一種類似JSON的二進位檔案,它是由許多的索引值對組成。如下所示

{  "name" : "huangz",  "age" : 20,  "sex" : "male"  }  {    "name" : "jack",  "class" : 3,   "grade" : 3  } 

而資料庫的整體結構組成如下:

索引值對--》文檔--》集合--》資料庫

MongoDB的檔案單個大小不超過4M,但是新版本後可提升到16M

MongoDB中的key命名規則如下:

  • "\0"不能使用
  • 帶有"."號,"_"號和"$"號首碼的Key被保留
  • 大小寫有區別,Age不同於age
  • 同一個文檔不能有相同的Key
  • 除了上面幾條規則外,其他所有UTF-8字元都可以使用
常用命令

1 #進入資料庫

use admin

2 #增加或修改密碼

db.addUser(‘xingoo‘,‘123‘)

db.addUser("xingoo","123",true) 參數分別為 使用者名稱、密碼、是否唯讀

3 #查看使用者列表

db.system.users.find()

4 #使用者認證

db.auth(‘xingoo‘,‘123‘)

5 #刪除使用者

db.removeUser(‘xingoo‘)

6 #查看所有使用者

show users

7 #查看所有資料庫

show dbs

8 #查看所有的collection集合

show collections

9 #查看各個collection的狀態

db.printCollectionStats()

10 #查看主從複製狀態

db.printReplicationInfo()

11 #修複資料庫

db.repairDatabase()

12 #設定profiling,0:off 1:slow 2 all

db.setProfilingLevel(1)

13 #查看profiling

show profiling

14 #拷貝資料庫

db.copyDatabase(‘xingootest‘,‘xingootest1‘)

db.copyDatabase("xingootest","temp","127.0.0.1")

15 #刪除集合collection

db.xingootest.drop()

16 #刪除當前資料庫

db.dropDatabase()

 

MongoDB增刪改命令

1 #儲存嵌套的對象

db.foo.save({‘name‘:xingoo,‘age‘:25,‘address‘:{‘city‘:‘changchun‘,‘Province‘:‘Jilin‘}})

2 #儲存數組對象

db.foo.save({‘name‘:xingoo,‘age‘:25,‘address‘:[‘Jilin Province‘,‘Liaoning Province‘]})

3 #根據query條件修改,如果不存在則插入,允許修改多條記錄

db.foo.update({‘age‘:‘25‘},{‘$set‘:{‘name‘:‘xingoo‘}},upsert=true,multi=true)

4 #刪除yy=5的記錄

db.foo.remove({‘name‘:‘xingoo‘})

5 #刪除所有的記錄

db.foo.remove()

 

索引

1 #增加索引:1 asc -1 desc

db.foo.ensureIndex({firstname:1,lastname:-1},{unieap:true})

2 #索引子物件(不懂)

db.foo.ensureIndex({‘Al.Em‘:!})

3 #查看索引資訊

db.foo.getIndexes()

db.foo.getIndexKeys()

4 #根據索引名刪除索引(不懂)

db.foo.dropIndex(‘Al.Em_1‘)

 

查詢

條件操作符

 1 $gt ---- > 2 $lt ---- < 3 $gte ---- >= 4 $lte ---- <= 5 $ne ---- != 、<> 6 $in ---- in 7 $nin ---- not in 8 $all ---- all 9 $or ---- or10 $not ---- 反匹配

 

1 #查詢所有記錄

db.foo.find() ---- select * from foo

2 #查詢某列非重複的記錄

db.foo.distinct("xingoo") ---- select distinct name from foo

3 #查詢age = 22 的記錄

db.foo.find({"age":22}) ---- select * from foo where age = 22

4 #查詢age > 22 的記錄

db.foo.find({age:{$gt:22}}) ---- select * from foo where age > 22

5 #查詢age < 22 的記錄

db.foo.find({age:{$lt:22}}) ---- select * from foo where age < 22

6 #查詢age <= 25的記錄

db.foo.find({age:{$lte:25}})

7 #查詢age >= 23 並且 age <=26的記錄

db.foo.find({age:{$gte:23,$lte:26}})

8 #查詢name中包含xingoo的資料

db.foo.find({name:/xingoo/}) ---- select * from foo where name like ‘%xingoo%‘

9 #查詢name中以xingoo開頭的資料

db.foo.find({name:/^xingoo/}) ---- select * from foo where name like ‘xingoo%‘

10 #查詢指定列name、age的資料

db.foo.find({},{name:1,age:1}) ---- select name,age from foo

11 #查詢制定列name、age資料,並且age > 22

db.foo.find({age:{$gt:22}},{name:1,age:1}) ---- select name,age from foo where age >22

12 #按照年齡排序

升序:db.foo.find().sort({age:1})  降序:db.foo.find().sort({age:-1})

13 #查詢name=xingoo.age=25的資料

db.foo.find({name:‘xingoo‘,age:22}) ---- select * from foo where name=‘xingoo‘ and age =‘25‘

14#查詢前5條資料

db.foo.find().limit(5) ---- select top 5 * from foo

15 #查詢10條以後的資料

db.foo.find().skip(10) ---- select * from foo where id not in (select top 10 * from foo);

16 #查詢在5-10之間的資料

db.foo.find().limit(10).skip(5) 

17 #or與查詢

db.foo.find({$or:[{age:22},{age:25}]}) ---- select * from foo where age=22 or age =25

18 #查詢第一條資料

db.foo.findOne() 、db.foo.find().limit(1)---- select top 1 * from foo

19 #查詢某個結果集的記錄條數

db.foo.find({age:{$gte:25}}).count() ---- select count(*) from foo where age >= 20

20 #按照某列進行排序(不懂)

db.foo.find({sex:{$exists:true}}).count() ---- select count(sex) from foo

21 #查詢age模數10等於0的資料

db.foo.find(‘this.age % 10 == 0‘)、db.foo.find({age:{$mod:[10,0]}})

22 #匹配所有

db.foo.find({age:{$all:[22,25]}})

23 #查詢不匹配name=X*帶頭的記錄

db.foo.find({name:{$not:/^X.*/}})

24 #排除返回age欄位

db.foo.find({name:‘xingoo‘},{age:0})

25 #判斷欄位是否存在

db.foo.find({name:{$exists:true}})

 

管理

1 #查看collection資料大小

db.xingootest.dataSize()

2 #查看collection狀態

db.xingootest.stats()

3 #查詢所有索引的大小

db.xingootest.totalIndexSize()

參考資料:

【MongoDB介紹及安裝】http://database.51cto.com/art/201103/247882.htm

【MongoDB使用入門】http://www.linuxidc.com/Linux/2013-01/78251.htm

【面試虐菜】—— MongoDB知識整理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.