先上結論,根據官網的說法是 B 樹

然而筆者看到一篇,雲棲社區-MongoDB 為什么使用B-樹而不是B+樹?,里面有人如下回答
實際是B+樹,這個在2018年元旦北京的MongoDB專場,我問了WiredTiger引擎的作者,他也確認了是B plus Tree。雖然官方文檔寫了B樹。
現在有些覺得迷惑了,要是有人知道,請留言告訴我好么。
由於第二個觀點,相關的佐證很難找,姑且還是采用官網的的說法是用 B 樹吧。
那么為什么是 B 樹?
在上一篇 MySQL 的索引實現 里筆者分析過
B+ 是在 B 樹上改進,它的數據都在葉子節點,同時葉子節點之間還加了指針形成鏈表。范圍選擇只需要找到首尾,通過鏈表就能把所有數據取出來了。
而 B 樹有啥好處呢?因此查詢單條數據的時候,B樹的查詢效率不固定,最好的情況是 O(1),因為它不需要再遍歷去找到葉子節點。所以可以認為在做單一數據查詢的時候,使用 B 樹平均性能更好。但是,由於 B 樹中各節點之間沒有指針相鄰,因此 B 樹做一些數據遍歷操作不那么適合。
換言之 MySQL 之所以選擇 B+,那是因為出於范圍選擇考慮的。那么 MongoDB 選擇 B 樹,可能是因為單一數據查詢多,范圍查詢少。
那為什么 Mongodb 范圍查詢少呢?是因為 Mysql 是關系型數據庫,而 Mongodb 是非關系型數據。往下看舉例
例子
下文圖片和例子都出自博客園-孤獨煙 為什么Mongodb索引用B樹,而Mysql用B+樹?
設計學生和班級一對多關系的表。關系型數據庫邏輯如下

此時要查 cname 為 1 班的班級,不論是 join,還是先查出所有 cid,后再 student 表里匹配這 cid 相同的記錄,都避免不了從一個表中取一個數據,去另一個表中逐行匹配,如果索引結構是 B+ 樹,葉子節點上是有指針的,能夠極大的提高這種一行一行的匹配速度。
那非關系型怎么設計?

然后再執行兩條查詢去計算結果,雖然是可以這么設計,但是 MongoDB 並不推薦。發揮非關系型數據庫的長處應當這么設計:

假設name這列,我們建了索引!尋執行一次語句,這樣就能查詢出自己想要的結果。
db.class.find( { name: '1班' } )
而這,就是一種單一數據查詢!畢竟你不需要去逐行匹配,不涉及遍歷操作,幸運的情況下,有可能一次IO就能夠得到你想要的結果。
因此,由於關系型數據庫和非關系型數據的設計方式上的不同。導致在關系型數據中,遍歷操作比較常見,因此采用B+樹作為索引,比較合適。而在非關系型數據庫中,單一查詢比較常見,因此采用B樹作為索引,比較合適。
