首个最全的MongoDB 3.6 全览

本文介绍了MongoDB 3.6版本的主要新特性,包括安全性增强、聚合框架改进、在线开启认证模式等功能,并提供了个人实践经验和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB 3.6 先睹为快 Part 1

振奋人心的时刻终于到来了,在经过一个MongoDB 上市的日子后,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
bind_ip

所以根据提示,我们只需要在启动的时候加上 --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 又得到了加强,可以配合letpipeline 来做出更优秀的连表查询了。 可以参考一下Example

其他聚合操作符

db.aggregate()

这是一个新的方法,用于在admin 库下,操作一些实例的事件

比如:

REMOVE

新的聚合方法,用于删除聚合中指定的某一字段

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

Array Update Operator Enhancements

$[]

现在可以通过$[] 操作符 来对数组中的所有元素进行一次性修改了,而且这个修改可以是使用类似$divide$sum 等操作符的哦~

&dollar;[<identifier>]

可以通过$[element] 配合 $cond 条件操作符等,来达到对数组的符合条件的元素统一更新。

mongo Shell Changes

聚合

在MongoDB Shell 中,加入了一些对于session 的操作指令集

JSON Schema

噔噔噔噔~

这个功能也是我力荐的,这里只做简要描述。期待下次分享~

我们可以通过$jsonSchema操作符来对集合的创建进一步的限制,但千万不要以为,这是MongoDB 向 RDB 的妥协哦。

相反的,MongoDB 保留了他的Flexible特性,通过其中的required 属性,可以控制哪些字段是强制要求的,哪些是可以不用保持一致的。

并且!!! 还添加了description 属性,用来对字段进行注解,这样,其他开发者包括DBAer 就可以一目了然啦。

Replica Sets

在副本集中,添加了一些功能和指令集,这些都不是最吸引我的,最吸引我的是如何现在可以在线添加认证模式了!不需要重启!没错,告别曾经那些半夜的窗口期吧!只有MongoDB 能够做到!只有!

另外我们的OpLog 也可以热重置啦!

Sharded Clusters

添加了一个指令集,用来控制Sharding 的同时并发任务数

ShardingTaskExecutorPoolMaxConnecting

其他加强

好了,今天的内容就分享到这里了,下次的分享内容有点纠结了,各位主给点意见?可以私信我,也可以在下面留言。

  1. 实战 MongoDB 3.6 ReplcaSet 在线开启认证模式

  2. 解读 MongoDB 3.6 $jsonSchema


我是上海小胖[MiracleYoung],专注MongoDB、MySQL、Redis等开源数据库的 DevOps,拥抱开源,接受收费。

上海小胖[MiracleYoung] 原创地址: https://segmentfault.com/u/shanghaixiaopang/articles

欢迎各位大神前来评论。

每周五,敬请期待,上海小胖[MiracleYoung] 独更。

如果夏雨荷还在大明湖畔等着我的话,我就不更了。

### MongoDB 3.6 版本特性 MongoDB 3.6引入了一系列重要的特性和改进,其中包括对驱动程序的要求、新的操作符以及变更流的支持。 为了充分利用这些新特性,需要客户端使用MongoDB driver 3.6版本,并且数据库需开启`featureCompatibilityVersion`设置为"3.6"[^1]。这一步骤确保了所有新功能都能被激活并正常使用。 #### $jsonschema 操作符 作为MongoDB 3.6的一个重要更新,`$jsonschema`是一个用于定义文档结构验证规则的新操作符。通过这个操作符可以在创建集合时指定字段的类型、长度、范围以及其他约束条件[^3]。例如: ```javascript db.createCollection("users", { validator: { $jsonSchema: { bsonType: "object", required: ["name", "age"], properties: { name: { bsonType: "string", description: "must be a string and is required" }, age: { bsonType: "int", minimum: 0, maximum: 120, exclusiveMaximum: false } } } } }) ``` 此代码片段展示了如何利用 `$jsonschema` 来设定 `users` 集合中的文档格式校验规则。 #### Change Streams 功能 另一个显著的变化是支持Change Streams,它允许应用程序监听特定事件的发生情况,比如插入、删除或修改数据记录等。要启用这项服务同样依赖于`featureCompatibilityVersion`设为"3.6"[^4]。下面是一段简单的Python代码来展示如何订阅更改通知: ```python from pymongo import MongoClient client = MongoClient(&#39;mongodb://localhost:27017/&#39;) with client.test_db.collection.watch() as stream: for change in stream: print(change) ``` 这段脚本会持续监控名为`test_db`下的某个collection内的任何变动,并实时打印出来。 ### 安装配置指南 对于想要尝试最新版mongo shell的同学而言,在MongoDB 4.4中提供了增强型shell环境,尽管处于beta阶段却已包含了诸如语法高亮显示、指令自动完成等功能提升用户体验;然而需要注意的是由于仍处在测试期所以并非全部命令都得到了完善支持[^2]。 安装过程通常涉及下载对应平台上的二进制文件包解压至合适位置即可启动运行。具体步骤可以参照官方文档说明进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值