MongoDB 3.6的一些新特性介紹
阿新 • • 發佈:2018-11-11
一、安全方面:
1、bind_ip
為了安全考慮,MongoDB 3.6中bind_ip的預設值為localhost,可通過啟動命令或者配置檔案繫結需訪問的ip地址
2、MONOGDB-CR認證
建議在3.6版將認證機制MONOGDB-CR更新為SCRAM,後續的版本將不再支援MONOGDB-CR
3、認證限制
① 在db.createuser()、db.updateuser() 、db.createrole()、db.updaterole()四個命令中增加authenticationRestrictions了引數,用來控制客戶端的ip和客戶端訪問服務端的IP。
② 在使用TLS/SSL時,添加了opensslcipherconfig引數控制openssl密碼。
③ 在服務端認證開啟的情況下,可以控制使用者只能發出一個遊標。
④ 增加了converttocapped方法,可將普通集合轉換成固定集合。
二、聚合
1、$lookup 在3.6中配合fron、let、pipeline、as可以更好的做連線查詢和子查詢,具體的用法可參考官網案例,
點選這裡
2、增加了如下的聚合操作符:
$arrayToObject 將陣列轉換成文件
$objectToArray 將文件轉換成陣列
$mergeobject 合併文件
$datefromstring 根據字串條件轉換date
$datefromparts 根據給定條件組成date
$datetoparts 將date轉換成一個個條件
3、remove,新的聚合變數,用以刪除聚合中符合制定條件的欄位
4、aggregate命令和db.collention.aggregate()支援hint和comment兩個新選項。
5、聚合操作支援Time Zones
三、陣列更新
1、findAndModify和update支援通過設定arrayFilters引數來修改陣列中的指定成員。
2、陣列更新
可通過$[]操作對陣列中的所有元素全量更新。
可根據arrayFilters條件對陣列全量更新。
3、更新陣列操作支援負數索引,來指定陣列中倒數的位置
四、相容MongoDB3.6的各語言版本
Java 3.6
Python 3.6
C 1.9
Node 3.0
C# 2.5
Ruby 2.5
PHP 1.4
五、Change Stream
Change Stream是3.6的新特性,允許應用程式實時訪問資料的變化,可以用來查詢集合上的所有資料的更改,以便及時作出相應,利用Change Streams這個功能,應用可以實現構建實時資料同步。
使用注意事項:
1、必須是複製集或者分片。
2、必須是wiretiger儲存引擎,且是協議複製版本pv1。
3、featureCompatibilityVersion引數必須設定成 “3.6”。
六、JSON SCHEMA
$jsonschema 是MongoDB3.6新增的操作符,
可在建表的時候用來新增約束條件,譬如可限制欄位的型別、長度、範圍、是否必須等。
七、複製集
1、廢棄了複製集協議protocol version 0(pv0)。
2、添加了replSetResizeOplog 命令,WiredTiger儲存引擎可以動態調整oplog的大小了。
3、添加了catchUpTakeoverDelayMillis配置選項,指定節點在發起選舉之前等待的時間,預設30秒,如超過這個時間該節點的資料仍是最新的,且當前主節點在追趕他,則立刻啟動選舉。
4、對於使用協議版本1(pv1)的複製集,如果仲裁人發現與候選人有相同或更高優先順序的節點在,他們將在選舉中投票反對票。
5、新增oplogInitialFindMaxSeconds引數來調整複製集的成員在資料同步期間使用find命令等待的時間。預設60s
6、增加了waitForSecondaryBeforeNoopWriteMS引數,以指定如果afterClusterTime大於oplog的最近應用時間,則secondary伺服器必須等待多長時間。預設10毫秒。 7、在複製集有成員初始化的時候,支援renamecollection(),converttocapped,$out,Map-reduce 8、支援線上新增認證。 八、分片叢集 1、添加了ShardingTaskExecutorPoolMaxConnecting引數,控制mongos將連線新增到mongod的速率,預設是2。
2、添加了orphanCleanupDelaySecs,以配置主片在刪除已遷移快前的最小延遲。
3、config資料庫中的config.system.sessions表可以做分片了。 九、索引 1、索引可以覆蓋巢狀欄位的查詢。 2、如某欄位變成多鍵欄位,多鍵索引可以覆蓋非陣列鍵的查詢。 3、索引名中不能包含*符號。 十、Retryable Writes Retryable Writes重試是3.6新增的特性,對於可重試寫入,MongoDB驅動程式會在遇到網路錯誤或者複製集故障轉移的時候重試這些操作。 使用重試需注意下述事項。 1、 重試只有複製集和分片可用, 2、客戶端需使用3.6以上的版本,並開啟featureCompatibilityVersion引數 3、重試只會執行一次,且執行期間沒有主庫。 4、需要wiretiger或儲存引擎。 十一、其它 1、dropdatabase 命令會等待drop表命令傳輸到大部分複製整合員後再執行。 2、對於在複製集合和分片上執行的命令,其返回文件包括operationtime和$clustertime 3、廢棄getpreverror命令。
4、對於使用協議版本1(pv1)的複製集,如果仲裁人發現與候選人有相同或更高優先順序的節點在,他們將在選舉中投票反對票。
5、新增oplogInitialFindMaxSeconds引數來調整複製集的成員在資料同步期間使用find命令等待的時間。預設60s
6、增加了waitForSecondaryBeforeNoopWriteMS引數,以指定如果afterClusterTime大於oplog的最近應用時間,則secondary伺服器必須等待多長時間。預設10毫秒。 7、在複製集有成員初始化的時候,支援renamecollection(),converttocapped,$out,Map-reduce 8、支援線上新增認證。 八、分片叢集 1、添加了ShardingTaskExecutorPoolMaxConnecting引數,控制mongos將連線新增到mongod的速率,預設是2。
2、添加了orphanCleanupDelaySecs,以配置主片在刪除已遷移快前的最小延遲。
3、config資料庫中的config.system.sessions表可以做分片了。 九、索引 1、索引可以覆蓋巢狀欄位的查詢。 2、如某欄位變成多鍵欄位,多鍵索引可以覆蓋非陣列鍵的查詢。 3、索引名中不能包含*符號。 十、Retryable Writes Retryable Writes重試是3.6新增的特性,對於可重試寫入,MongoDB驅動程式會在遇到網路錯誤或者複製集故障轉移的時候重試這些操作。 使用重試需注意下述事項。 1、 重試只有複製集和分片可用, 2、客戶端需使用3.6以上的版本,並開啟featureCompatibilityVersion引數 3、重試只會執行一次,且執行期間沒有主庫。 4、需要wiretiger或儲存引擎。 十一、其它 1、dropdatabase 命令會等待drop表命令傳輸到大部分複製整合員後再執行。 2、對於在複製集合和分片上執行的命令,其返回文件包括operationtime和$clustertime 3、廢棄getpreverror命令。
參考文件:https://docs.mongodb.com/master/release-notes/3.6/#new-aggregation-stages