當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]1、MongoDB是什么?MongoDB是由C語言編寫的,是一個(gè)基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。再高負(fù)載的情況下,添加更多的節(jié)點(diǎn),可以保證服務(wù)器性能。MongoDB旨在給Web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。MongoDB將數(shù)據(jù)存儲為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=...

大廠MongoDB面試題集錦


1、MongoDB是什么?
MongoDB是由C 語言編寫的,是一個(gè)基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。再高負(fù)載的情況下,添加更多的節(jié)點(diǎn),可以保證服務(wù)器性能。MongoDB旨在給Web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。
MongoDB將數(shù)據(jù)存儲為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。MongoDB文檔類似于JSON對象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。
大廠MongoDB面試題集錦


2、MongoDB有哪些特點(diǎn)?
  • MongoDB是一個(gè)面向文檔存儲的數(shù)據(jù)庫,操作起來比較簡單和容易。

  • 你可以在MongoDB記錄中設(shè)置任何屬性的索引(如:FirstName="Sameer",Address="8 Gandhi Road")來實(shí)現(xiàn)更快的排序。

  • 你可以通過本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongoDB有更強(qiáng)的擴(kuò)展性。

  • 如果負(fù)載的增加(需要更多的存儲空間和更強(qiáng)的處理能力),它可以分布在計(jì)算機(jī)網(wǎng)絡(luò)中的其他節(jié)點(diǎn)上這就是所謂的分片。

  • MongoDB支持豐富的查詢表達(dá)式。查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。

  • MongoDB使用update()命令可以實(shí)現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段。

  • MongoDB中的Map/Reduce主要是用來對數(shù)據(jù)進(jìn)行批量處理和聚合操作。

  • Map和Reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數(shù)進(jìn)行處理。

  • Map函數(shù)和Reduce函數(shù)是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執(zhí)行MapReduce操作。

  • GridFS是MongoDB中的一個(gè)內(nèi)置功能,可以用于存放大量小文件。

  • MongoDB允許在服務(wù)端執(zhí)行腳本,可以用JavaScript編寫某個(gè)函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接調(diào)用即可。


3、你說的NoSQL數(shù)據(jù)庫是什么意思?NoSQL與RDBMS直接有什么區(qū)別?為什么要使用和不使用NoSQL數(shù)據(jù)庫?說一說NoSQL數(shù)據(jù)庫的幾個(gè)優(yōu)點(diǎn)?
NoSQL是非關(guān)系型數(shù)據(jù)庫,NoSQL = Not Only SQL。
關(guān)系型數(shù)據(jù)庫采用的結(jié)構(gòu)化的數(shù)據(jù),NoSQL采用的是鍵值對的方式存儲數(shù)據(jù)。
在處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù)時(shí),在水平方向上進(jìn)行擴(kuò)展時(shí),隨時(shí)應(yīng)對動態(tài)增加的數(shù)據(jù)項(xiàng)時(shí)可以優(yōu)先考慮使用NoSQL數(shù)據(jù)庫。
再考慮數(shù)據(jù)庫的成熟度,支持,分析和商業(yè)智能,管理及專業(yè)性等問題時(shí),應(yīng)優(yōu)先考慮關(guān)系型數(shù)據(jù)庫。
4、NoSQL數(shù)據(jù)庫有哪些類型?
NoSQL數(shù)據(jù)庫的類型例如:MongoDB、Cassandra、CouchDB、Hypertable、Redis、Riak、HBASE、Memcache等.
5、MySQL與MongoDB之間最基本的差別是什么?
MySQL和MongoDB兩者都是免費(fèi)開源的數(shù)據(jù)庫。MySQL和MongoDB有許多基本差別包括數(shù)據(jù)的表示(data representation),查詢,關(guān)系,事務(wù),schema的設(shè)計(jì)和定義,標(biāo)準(zhǔn)化(normalization),速度和性能。
通過比較MySQL和MongoDB,實(shí)際上我們是在比較關(guān)系型和非關(guān)系型數(shù)據(jù)庫,即數(shù)據(jù)存儲結(jié)構(gòu)不同。
6、你怎么比較MongoDB、CouchDB及CouchBase?
MongoDB和CouchDB都是面向文檔的數(shù)據(jù)庫。MongoDB和CouchDB都是開源NoSQL數(shù)據(jù)庫的最典型代表。除了都以文檔形式存儲外它們沒有其他的共同點(diǎn)。MongoDB和CouchDB在數(shù)據(jù)模型實(shí)現(xiàn)、接口、對象存儲以及復(fù)制方法等方面有很多不同。
7、MongoDB成為最好NoSQL數(shù)據(jù)庫的原因是什么?
以下特點(diǎn)使得MongoDB成為最好的NoSQL數(shù)據(jù)庫:
  • 面向文件的

  • 高性能

  • 高可用性

  • 易擴(kuò)展性

  • 豐富的查詢語言


8、journal回放在條目(entry)不完整時(shí)(比如恰巧有一個(gè)中途故障了)會遇到問題嗎?
每個(gè)journal(group)的寫操作都是一致的,除非它是完整的否則在恢復(fù)過程中它不會回放。
9、分析器在MongoDB中的作用是什么?
MongoDB中包括了一個(gè)可以顯示數(shù)據(jù)庫中每個(gè)操作性能特點(diǎn)的數(shù)據(jù)庫分析器。通過這個(gè)分析器你可以找到比預(yù)期慢的查詢(或?qū)懖僮鳎焕眠@一信息,比如,可以確定是否需要添加索引。
10、namespace是什么?
MongoDB存儲BSON對象在叢集(collection)中。數(shù)據(jù)庫名字和叢集名字以句點(diǎn)連結(jié)起來叫做namespace。
11、如果用戶移除對象的屬性,該屬性是否從存儲層中刪除?
是的,用戶移除屬性然后對象會重新保存(re-save())。
12、能否使用日志特征進(jìn)行安全備份?
是的。
13、允許空值null嗎?
對于對象成員而言,是的。然而用戶不能夠添加空值(null)到數(shù)據(jù)庫叢集(collection)因?yàn)榭罩挡皇菍ο?,然而用戶能夠添加空對象{}。
14、更新操作立刻fsync到磁盤?
不會,磁盤寫操作默認(rèn)是延遲執(zhí)行的。寫操作可能在兩三秒(默認(rèn)在60秒內(nèi))后到達(dá)磁盤。例如,如果一秒內(nèi)數(shù)據(jù)庫收到一千個(gè)對一個(gè)對象遞增的操作,僅刷新磁盤一次。(注意,盡管fsync選項(xiàng)在命令行和經(jīng)過getLastError_old是有效的)
15、如何執(zhí)行事務(wù)/加鎖?
MongoDB沒有使用傳統(tǒng)的鎖或者復(fù)雜的帶回滾的事務(wù),因?yàn)樗O(shè)計(jì)的宗旨是輕量,快速以及可預(yù)計(jì)的高性能??梢园阉惐瘸蒑ySQL MylSAM的自動提交模式。通過精簡對事務(wù)的支持,性能得到了提升,特別是在一個(gè)可能會穿過多個(gè)服務(wù)器的系統(tǒng)里。
16、為什么我的數(shù)據(jù)文件如此龐大?
MongoDB會積極的預(yù)分配預(yù)留空間來防止文件系統(tǒng)碎片。
17、啟用備份故障恢復(fù)需要多久?
從備份數(shù)據(jù)庫聲明主數(shù)據(jù)庫宕機(jī)到選出一個(gè)備份數(shù)據(jù)庫作為新的主數(shù)據(jù)庫將花費(fèi)10到30秒時(shí)間。這期間在主數(shù)據(jù)庫上的操作將會失敗——包括寫入和強(qiáng)一致性讀?。╯trong consistent read)操作。然而,你還能在第二數(shù)據(jù)庫上執(zhí)行最終一致性查詢(eventually consistent query)(在slaveOk模式下),即使在這段時(shí)間里。
18、什么是master或primary?
它是當(dāng)前備份集群(replica set)中負(fù)責(zé)處理所有寫入操作的主要節(jié)點(diǎn)/成員。在一個(gè)備份集群中,當(dāng)失效備援(failover)事件發(fā)生時(shí),一個(gè)另外的成員會變成primary。
19、什么是secondary或slave?
Seconday從當(dāng)前的primary上復(fù)制相應(yīng)的操作。它是通過跟蹤復(fù)制oplog(local.oplog.rs)做到的。
20、我必須調(diào)用getLastError來確保寫操作生效了么?
不用。不管你有沒有調(diào)用getLastError(又叫Safe Mode)服務(wù)器做的操作都一樣。調(diào)用getLastError只是為了確認(rèn)寫操作成功提交了。當(dāng)然,你經(jīng)常想得到確認(rèn),但是寫操作的安全性和是否生效不是由這個(gè)決定的。
21、我應(yīng)該啟動一個(gè)集群分片(sharded)還是一個(gè)非集群分片的MongoDB環(huán)境?
為開發(fā)便捷起見,我們建議以非集群分片(unsharded)方式開始一個(gè)MongoDB環(huán)境,除非一臺服務(wù)器不足以存放你的初始數(shù)據(jù)集。從非集群分片升級到集群分片(sharding)是無縫的,所以在你的數(shù)據(jù)集還不是很大的時(shí)候沒必要考慮集群分片(sharding)。
22、分片(sharding)和復(fù)制(replication)是怎樣工作的?
每一個(gè)分片(shard)是一個(gè)分區(qū)數(shù)據(jù)的邏輯集合。分片可能由單一服務(wù)器或者集群組成,我們推薦為每一個(gè)分片(shard)使用集群。
23、數(shù)據(jù)在什么時(shí)候才會擴(kuò)展到多個(gè)分片(shard)里?
MongoDB分片是基于區(qū)域(range)的。所以一個(gè)集合(collection)中的所有的對象都被存放到一個(gè)塊(chunk)中。只有當(dāng)存在多余一個(gè)塊的時(shí)后,才會有多個(gè)分片獲取數(shù)據(jù)的選項(xiàng)?,F(xiàn)在,每個(gè)默認(rèn)塊的大小是64Mb,所以你需要至少64Mb空間才可以實(shí)施一個(gè)遷移。
24、當(dāng)我試圖更新一個(gè)正在被遷移的塊(chunk)上的文檔時(shí)會發(fā)生什么?
更新操作會立即發(fā)生在舊的分片(shard)上,然后更改才會在所有權(quán)轉(zhuǎn)移(ownership transfers)前復(fù)制到新的分片上。
25、如果在一個(gè)分片(shard)停止或者很慢的時(shí)候,我發(fā)起一個(gè)查詢會怎樣?
如果一個(gè)分片(shard)停止了,除非查詢設(shè)置了“Partial”選項(xiàng),否則查詢會返回一個(gè)錯(cuò)誤。如果一個(gè)分片(shard)響應(yīng)很慢,MongoDB則會等待它的響應(yīng)。
26、我可以把moveChunk目錄里的舊文件刪除嗎?
沒問題,這些文件是在分片(shard)進(jìn)行均衡操作(balancing)的時(shí)候產(chǎn)生的臨時(shí)文件。一旦這些操作已經(jīng)完成,相關(guān)的臨時(shí)文件也應(yīng)該被刪除掉。但目前清理工作是需要手動的,所以請小心地考慮再釋放這些文件的空間。
27、我怎么查看MongoDB正在使用的鏈接?
db._adminCommand("connPoolStats");


28、如果塊移動操作(moveChunk)失敗了,我需要手動清除部分轉(zhuǎn)移的文檔嗎?
不需要,移動操作是一致(consistent)并且是確定性的(deterministic);一次失敗后,移動操作會不斷重試;當(dāng)完成后,數(shù)據(jù)只會出現(xiàn)在新的分片里(shard)。
29、如果我在使用復(fù)制技術(shù)(replication),可以一部分使用日志(journaling)而其他部分則不使用嗎?
可以。
30、當(dāng)更新一個(gè)正在被遷移的塊(Chunk)上的文檔時(shí)會發(fā)生什么?
更新操作會立即發(fā)生在舊的塊(Chunk)上,然后更改才會在所有權(quán)轉(zhuǎn)移前復(fù)制到新的分片上。
31、MongoDB在A:{B,C}上建立索引,查詢A:{B,C}和A:{C,B}都會使用索引嗎?
不會,只會在A:{B,C}上使用索引。
32、如果一個(gè)分片(Shard)停止或很慢的時(shí)候,發(fā)起一個(gè)查詢會怎樣?
如果一個(gè)分片停止了,除非查詢設(shè)置了“Partial”選項(xiàng),否則查詢會返回一個(gè)錯(cuò)誤。如果一個(gè)分片響應(yīng)很慢,MongoDB會等待它的響應(yīng)。
33、MongoDB支持存儲過程嗎?如果支持的話,怎么用?
MongoDB支持存儲過程,它是JavaScript寫的,保存在db.system.js表中。
34、如何理解MongoDB中的GridFS機(jī)制,MongoDB為何使用GridFS來存儲文件?
GridFS是一種將大型文件存儲在MongoDB中的文件規(guī)范。使用GridFS可以將大文件分隔成多個(gè)小文檔存放,這樣我們能夠有效的保存大文檔,而且解決了BSON對象有限制的問題。
35、為什么MongoDB的數(shù)據(jù)文件很大?
MongoDB采用的預(yù)分配空間的方式來防止文件碎片。
36、分析器在MongoDB中的作用是什么?
分析器就是explain顯示每次操作性能特點(diǎn)的數(shù)據(jù)庫分析器。通過分析器可能查找比預(yù)期慢的操作。
37、如何執(zhí)行事務(wù)/加鎖?
因?yàn)镸ongoDB設(shè)計(jì)就是輕量高性能,所以沒有傳統(tǒng)的鎖和復(fù)雜的事務(wù)的回滾。
38、getLastError的作用?
調(diào)用getLastError可以確認(rèn)當(dāng)前的寫操作是否成功的提交。
39、MongoDB的結(jié)構(gòu)介紹?
數(shù)據(jù)庫中存儲的對象設(shè)計(jì)bson,一種類似json的二進(jìn)制文件,由鍵值對組成。
40、數(shù)據(jù)庫的整體結(jié)構(gòu)?
鍵值對–》文檔–》集合–》數(shù)據(jù)庫
41、MongoDB是由哪種語言寫的?
MongoDB用C 編寫的,流行的開源數(shù)據(jù)庫MySQL也是用C 開發(fā)的。C 于1983年發(fā)行,是一種使用廣泛的計(jì)算機(jī)程序設(shè)計(jì)語言。它是一種痛用程序設(shè)計(jì)語言,支持多種編程模式。
42、MongoDB的優(yōu)勢有哪些?
  • 面向文檔的存儲:以JSON格式的文檔保存數(shù)據(jù)。

  • 任何屬性都可以建立索引。

  • 復(fù)制以及高可擴(kuò)展性。

  • 自動分片。

  • 豐富的查詢功能。

  • 快速的即時(shí)更新。

  • 來自MongoDB的專業(yè)支持。


43、什么是集合?
集合就是一組MongoDB文檔。它相當(dāng)于關(guān)系型數(shù)據(jù)庫(RDBMS)中的表這種概念。集合位于單獨(dú)的一個(gè)數(shù)據(jù)庫中。一個(gè)集合內(nèi)的多個(gè)文檔可以有多個(gè)不同的字段。一般來說,集合中的文檔都有著相同或相關(guān)的目的。
44、什么是文檔?
文檔由一組key value組成。文檔是動態(tài)模式,這意味著同一集合里的文檔不需要有相同的字段和結(jié)構(gòu)。在關(guān)系型數(shù)據(jù)庫中table中的每一條記錄相當(dāng)于MongoDB中的一個(gè)文檔。
45、什么是“mongod”?
mongod是處理MongoDB系統(tǒng)的主要進(jìn)程。它處理數(shù)據(jù)請求,管理數(shù)據(jù)存儲,和執(zhí)行后臺管理操作。當(dāng)我們運(yùn)行mongod命令意味著正在啟動MongoDB進(jìn)程,并且在后臺運(yùn)行。
46、“mongod”參數(shù)有什么?
  • 傳遞數(shù)據(jù)庫存儲路徑,默認(rèn)是“/data/db”

  • 端口號默認(rèn)是“27017”


47、什么是“mongo”?
它是一個(gè)命令行工具,用于連接一個(gè)特定的mongod實(shí)例。當(dāng)我們沒有帶參數(shù)運(yùn)行mongo命令,它將使用默認(rèn)的端口號和localhost連接。
48、在MongoDB中如何創(chuàng)建一個(gè)新的數(shù)據(jù)庫?
MongoDB用use 數(shù)據(jù)庫名稱的方式來創(chuàng)建數(shù)據(jù)庫。use會創(chuàng)建一個(gè)新的數(shù)據(jù)庫,如果該數(shù)據(jù)庫存在,則返回這個(gè)數(shù)據(jù)庫。
49、什么是非關(guān)系型數(shù)據(jù)庫?
非關(guān)系型數(shù)據(jù)庫是對不同于傳統(tǒng)關(guān)系型數(shù)據(jù)庫的統(tǒng)稱。非關(guān)系型數(shù)據(jù)庫的顯著特點(diǎn)是不使用SQL作為查詢語言,數(shù)據(jù)存儲不需要特定的表格模式。由于簡單的設(shè)計(jì)和非常好的性能所以被用于大數(shù)據(jù)和Web Apps等。
50、非關(guān)系型數(shù)據(jù)庫有哪些類型?
  • -Key-Value 存儲,eg:Amazon S3

  • 圖表,eg:Neo4J

  • 文檔存儲,eg:MongoDB

  • 基于列存儲,eg:Cassandra


51、為什么用MongoDB?
  • 架構(gòu)簡單

  • 沒有復(fù)雜的連接

  • 深度查詢能力,MongoDB支持動態(tài)查詢

  • 容易調(diào)試

  • 容易擴(kuò)展

  • 不需要轉(zhuǎn)化/映射應(yīng)用對象到數(shù)據(jù)庫對象

  • 使用內(nèi)部內(nèi)存作為存儲工作區(qū),以便更快的存取數(shù)據(jù)


52、在哪些場景使用MongoDB?
  • 大數(shù)據(jù)

  • 內(nèi)容管理系統(tǒng)

  • 移動端Apps

  • 數(shù)據(jù)管理


53、MongoDB中的命名空間是什么意思?
MongoDB內(nèi)部有預(yù)分配空間的機(jī)制,每個(gè)預(yù)分配的文件都用0進(jìn)行填充。
數(shù)據(jù)文件每新分配一次,它的大小都是上一個(gè)數(shù)據(jù)文件大小的2倍,每個(gè)數(shù)據(jù)文件最大2G。
MongoDB每個(gè)集合和每個(gè)索引都對應(yīng)一個(gè)命名空間,這些命名空間的元數(shù)據(jù)集中在16M的*.ns文件中,平均每個(gè)命名占用約628字節(jié),也即整個(gè)數(shù)據(jù)庫的命名空間的上限約為24000。
如果每個(gè)集合有一個(gè)索引(比如默認(rèn)的_id索引),那么最多可以創(chuàng)建12000個(gè)集合。如果索引數(shù)更多,則可創(chuàng)建的集合數(shù)就更少了。同時(shí),如果集合數(shù)太多,一些操作也會變慢。
要建立更多的集合的話,MongoDB也是支持的,只需要在啟動時(shí)加上“--nssize”參數(shù),這樣對應(yīng)數(shù)據(jù)庫的命名空間文件就可以變得更大以便保存更多的命名。這個(gè)命名空間文件(.ns文件)最大可以為2G。
每個(gè)命名空間對應(yīng)的盤區(qū)不一定是連續(xù)的。與數(shù)據(jù)文件增長相同,每個(gè)命名空間對應(yīng)的盤區(qū)大小都是隨分配次數(shù)不斷增長的。目的是為了平衡命名空間浪費(fèi)的空間與保持一個(gè)命名空間數(shù)據(jù)的連續(xù)性。
需要注意的一個(gè)命名空間$freelist,這個(gè)命名空間用于記錄不再使用的盤區(qū)(被刪除的Collection或索引)。每當(dāng)命名空間需要分配新盤區(qū)時(shí),會先查看$freelist是否有大小合適的盤區(qū)可以使用,如果有就回收空閑的磁盤空間。
54、哪些語言支持MongoDB?
C、C 、C#、Java、Node.js、Perl、PHP等。
55、在MongoDB中如何查看數(shù)據(jù)庫列表?
使用命令:show?dbs


56、MongoDB中的分片是什么意思?
分片是將數(shù)據(jù)水平切分到不同的物理節(jié)點(diǎn)。當(dāng)應(yīng)用數(shù)據(jù)越來越大的時(shí)候,數(shù)據(jù)量也會越來越大。當(dāng)數(shù)據(jù)量增長時(shí),單臺機(jī)器有可能無法存儲數(shù)據(jù)或可接受的讀取寫入吞吐量。利用分片技術(shù)可以添加更多的機(jī)器來應(yīng)對數(shù)據(jù)量增加以及讀寫操作的要求。
57、什么是復(fù)制?
復(fù)制是將數(shù)據(jù)同步到多個(gè)服務(wù)器的過程,通過多個(gè)數(shù)據(jù)副本存儲到多個(gè)服務(wù)器上增加數(shù)據(jù)可用性。復(fù)制可以保障數(shù)據(jù)的安全性,災(zāi)難恢復(fù),無需停機(jī)維護(hù)(如備份、重建索引、壓縮),分布式讀取數(shù)據(jù)。
58、在MongoDB中如何在集合中插入一個(gè)文檔?
要想將數(shù)據(jù)插入MongoDB集合中,需要使用insert()或save()方法。>db.collectionName.insert({"key":"value"})
>db.collectionName.save({"key":"value"})


59、在MongoDB中如何除去一個(gè)數(shù)據(jù)庫?
MongoDB的dropDatabase()命令用于刪除已有數(shù)據(jù)庫:>db.dropDatabase()


60、在MongoDB中如何創(chuàng)建一個(gè)集合?
在MongoDB中,創(chuàng)建集合采用db.createCollection(name, options)方法。options是一個(gè)用來指定集合配置的文檔。>db.createCollection("collectionName")db.createCollection()?-?MongoDB?Manual>db.createCollection()


61、在MongoDB中如何查看一個(gè)已經(jīng)創(chuàng)建的集合?
可以使用show collections查看當(dāng)前數(shù)據(jù)庫中的所有集合清單:>show?collections


62、在MongoDB中如何刪除一個(gè)集合?
MongoDB利用db.collection.drop()來刪除數(shù)據(jù)庫中的集合:>db.CollectionName.drop()


63、為什么要在MongoDB中使用分析器?
數(shù)據(jù)庫分析工具(Database Profiler)會針對正在運(yùn)行的mongod實(shí)例收集數(shù)據(jù)庫命令執(zhí)行的相關(guān)信息。包括增刪改查的命令以及配置和管理命令。分析器(profiler)會寫入所有收集的數(shù)據(jù)到system.profile集合,一個(gè)capped集合在管理員數(shù)據(jù)庫。分析器默認(rèn)是關(guān)閉的你能通過per數(shù)據(jù)庫或per實(shí)例開啟。
64、MongoDB支持主鍵外鍵關(guān)系嗎?
默認(rèn)MongoDB不支持主鍵和外鍵關(guān)系。用MongoDB本身的API需要硬編碼才能實(shí)現(xiàn)外鍵關(guān)聯(lián),不夠直觀且難度較大。
65、MongoDB支持哪些數(shù)據(jù)類型?
String、Integer、Double、Boolean、Object、Object ID、Arrays、Min/Max Keys、Datetime、Code、Regular Expression等。
66、為什么要在MongoDB中用“Code”數(shù)據(jù)類型?
“Code”類型用于在文檔中存儲JavaScript代碼。
67、為什么要在MongoDB中用“Regular Expression”數(shù)據(jù)類型?
“Regular Expression”類型用于在文檔中存儲正則表達(dá)式。
68、為什么在MongoDB中使用“ObjectID”數(shù)據(jù)類型?
“ObjectID”數(shù)據(jù)類型用于存儲文檔ID。
69、“ObjectID”由哪些部分組成?
一共有四部分組成:時(shí)間戳、客戶端ID、客戶進(jìn)程ID、三個(gè)字節(jié)的增量計(jì)數(shù)器。
_id是一個(gè)12字節(jié)長的十六進(jìn)制數(shù),它保證了每一個(gè)文檔的唯一性。在插入文檔時(shí),需要提供_id。如果你不提供,那么MongoDB就會為每一文檔提供一個(gè)唯一的id。_id的頭4個(gè)字節(jié)代表的是當(dāng)前的時(shí)間戳,接著的后3個(gè)字節(jié)表示的是機(jī)器id號,接著的2個(gè)字節(jié)表示MongoDB服務(wù)器進(jìn)程id,最后的3個(gè)字節(jié)代表遞增值。
70、在MongoDB中什么是索引?
索引用于高效的執(zhí)行查詢,沒有索引MongoDB將掃描查詢整個(gè)集合中的所有文檔這種掃描效率很低,需要處理大量數(shù)據(jù)。索引是一種特殊的數(shù)據(jù)結(jié)構(gòu),將一小塊數(shù)據(jù)集保存為容易遍歷的形式。索引能夠存儲某種特殊字段或字段集的值,并按照索引指定的方式將字段值進(jìn)行排序。
71、如何添加索引?
使用db.collection.createIndex()在集合中創(chuàng)建一個(gè)索引:>db.collectionName.createIndex({columnName:1})


72、用什么方法可以格式化輸出結(jié)果?
使用pretty()方法可以格式化顯示結(jié)果:>db.collectionName.find().pretty()


73、如何使用“AND”或“OR”條件循環(huán)查詢集合中的文檔?
在find()方法中,如果傳入多個(gè)鍵,并用逗號(,)分隔它們,那么MongoDB會把它看成是AND條件。>db.mycol.find({key1:value1,?key2:value2}).pretty()

若基于OR條件來查詢文檔,可以使用關(guān)鍵字$or。>db.mycol.find(
?{
??$or:?[
????{key1:?value1},?{key2:value2}
??]
?}
).pretty()


74、在MongoDB中如何更新數(shù)據(jù)?
update()與save()方法都能用于更新集合中的文檔。update()方法更新已有文檔中的值,而save()方法則是用傳入該方法的文檔來替換已有文檔。
75、如何刪除文檔?
MongoDB利用remove()方法清除集合中的文檔。它有2個(gè)可選參數(shù):
  • deletion criteria:(可選)刪除文檔的標(biāo)準(zhǔn)。

  • justOne:(可選)如果設(shè)為true或1,則只刪除一個(gè)文檔。

>db.collectionName.remove({key:value})


76、在MongoDB中如何排序?
MongoDB中的文檔排序是通過sort()方法來實(shí)現(xiàn)的。sort()方法可以通過一些參數(shù)來指定要進(jìn)行排序的字段,并使用1和-1來指定排序方式,其中1表示升序,而-1表示降序。>db.connectionName.find({key:value}).sort({columnName:1})


77、什么是聚合?
聚合操作能夠處理數(shù)據(jù)記錄并返回計(jì)算結(jié)果。聚合操作能將多個(gè)文檔中的值組合起來,對成組數(shù)據(jù)執(zhí)行各種操作,返回單一的結(jié)果。它相當(dāng)于SQL中的count(*)組合group by。對于MongoDB中的聚合操作,應(yīng)該使用aggregate()方法。>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)


78、在MongoDB中什么是副本集?
在MongoDB中副本集由一組MongoDB實(shí)例組成,包括一個(gè)主節(jié)點(diǎn)多個(gè)次節(jié)點(diǎn),MongoDB客戶端的所有數(shù)據(jù)都寫入主節(jié)點(diǎn)(Primary),副節(jié)點(diǎn)從主節(jié)點(diǎn)同步寫入數(shù)據(jù),以保持所有復(fù)制集內(nèi)存儲相同的數(shù)據(jù),提高數(shù)據(jù)可用性。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉