1. 程式人生 > >MongoDB 3.6新功能先睹為快!

MongoDB 3.6新功能先睹為快!

作者介紹

上海小胖,中國第十五位MONGODB PROFESSIONAL獲得者,資深Python開發、DBA。DevOps踐行者,曾獨立開發Web服務平臺,電商爬蟲系統、運維管理系統,涵蓋資料熱力圖、核心資料監控、伺服器監控系統等。個人部落格地址:https://segmentfault.com/u/shanghaixiaopang。

振奮人心的時刻終於到來!MongoDB 在上市之後,終於釋出了MongoDB 3.6 RC3。今天花了整整一天把Release Notes 看了一遍,把大多數的功能都嘗試了一遍,其中也不乏一些坑。有興趣的小夥伴們可以先睹為快。

https://docs.mongodb.com/master/release-notes/3.6/

今天的文章將為大家帶來一個總體的概覽,並給出我個人的踩坑經驗。

Security

在這裡,能看出MongoDB 是有多重視安全了吧,把它放在第一位。那麼有哪些需要注意的呢?

bind_ip

經過多輪位元比勒索案後(我猜的),在不影響開發效率的情況下,做了一些改變,將bind_ip 預設值修改為了localhost,這也是一個從之前版本升級過來後的坑,因為本人就因為一掃而過,直接看ReplcaSet 去了,導致在這裡停留了半個小時,差點GG了。

那麼如何解決這個問題呢?在啟動時,會有一個關於這個的WARNING。

MongoDB

所以根據提示,我們只需要在啟動的時候加上 –bind_ip_all 或者 在配置檔案中加入net.bindIp: 0.0.0.0 或者 net.bindIpAll: true。

其它安全性方面的加強

  • 在使用SSL 時,添加了opensslCipherConfig引數。
  • 現在,只要服務端開啟了認證許可權,開發者只能發出一個getMore 的遊標請求。
  • 在db.createUser()和 db.updateUser()中添加了authenticationRestrictions 引數,可以用來控制Client端發來的請求源IP以及請求的Server端指定IP。(這個功能一直覺得很有必要出啊!真是出到我心坎裡去了!)
  • 添加了convertToCapped的方法用來儲存自定義角色。

Aggregation

聚合方面,MongoDB 確實在每一次的版本更新中都是會有出色表現的,這一次也不為過,不過我並不準備在這裡逐一介紹。有興趣的小夥伴可以自己翻閱哦~或者等待後續文章補充~

$lookup

不得不提的還是這個$lookup 相比3.4 ,3.6中的$lookup 又得到了加強,可以配合let 和 pipeline 來做出更優秀的連表查詢了。 可以參考一下Example。

(https://docs.mongodb.com/master/reference/operator/aggregation/lookup/#lookup-syntax-let-pipeline)

其它聚合操作符:

  • $listSessions
  • $listLocalSessions
  • $currentOp
  • $arrayToObject
  • $objectToArray
  • $mergeObjects
  • $dateFromString
  • $dateFromParts
  • $dateToParts

db.aggregate()

這是一個新的方法,用於在admin 庫下,操作一些例項的事件。

比如:

  • $currentOp
  • $listLocalSessions

REMOVE

新的聚合方法,用於刪除聚合中指定的某一欄位。

https://docs.mongodb.com/master/reference/aggregation-variables/#variable.REMOVE

Array Update Operator Enhancements

$[]

現在可以通過$[] 操作符 來對陣列中的所有元素進行一次性修改了,而且這個修改可以是使用類似$divide 、$sum 等操作符~
$[]
可以通過$[element] 配合 $cond 條件操作符等,來達到對陣列的符合條件的元素統一更新。

mongo Shell Changes

聚合

在MongoDB Shell 中,加入了一些對於session 的操作指令集。
  • $listSessions
  • $listLocalSessions

JSON Schema

噔噔噔噔~這個功能也是我力薦的,這裡只做簡要描述。期待下次分享~

我們可以通過$jsonSchema操作符來對集合的建立進一步的限制,但千萬不要以為,這是MongoDB 向 RDB 的妥協哦。

相反的,MongoDB 保留了它的Flexible特性,通過其中的required 屬性,可以控制哪些欄位是強制要求的,哪些是可以不用保持一致的。

並且還添加了description 屬性,用來對欄位進行註解,這樣其它開發者包括DBAer 就可以一目瞭然了。

Replica Sets

在副本集中,添加了一些功能和指令集,這些都不是最吸引我的,最吸引我的是如何線上新增認證模式!不需要重啟!沒錯,告別曾經那些半夜的視窗期吧!只有MongoDB 能夠做到!

另外我們的OpLog 也可以熱重置了:

  • 開始廢棄了 副本集協議版本 0;
  • 添加了 replSetResizeOplog 對OpLog 進行熱重置大小,無需重啟。

Sharded Clusters

添加了一個指令集,用來控制Sharding 的同時併發任務數

ShardingTaskExecutorPoolMaxConnecting

https://docs.mongodb.com/master/reference/parameters/#param.ShardingTaskExecutorPoolMaxConnecting

其它加強

  • 每個集合都添加了一個類似的UUID
  • 不能對索引命名為帶星號*
  • 現在如果Multi-Key Index 上有沒有陣列的文件,也可以進行索引了
  • adminCommand中的listDatabase 添加了一些引數

    https://docs.mongodb.com/master/reference/command/listDatabases/#dbcmd.listDatabases

    1)nameOnly

    2)filter

  • 現在網路傳輸中,支援zlib壓縮協議了

今天的內容就分享到這裡了,下次的分享內容有點糾結了,歡迎大家留言,多提意見。

  1. 實戰 MongoDB 3.6 ReplcaSet 線上開啟認證模式
  2. 解讀 MongoDB 3.6 $jsonSchema

原文來自微信公眾號:DBAplus社群