Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

MongoDB 8.0中的兼容性更改

在此页面上

  • 查询行为
  • 弃用
  • 向后不兼容的功能
  • 一般性变更
  • 聚合(Aggregation)

从MongoDB 8.0开始,等值等值匹配表达式中与 null的比较与undefined值不匹配。

示例,考虑以下文档和查询:

// people collection
[
{ _id: 1, name: null },
{ _id: 2, name: undefined },
{ _id: 3, name: [ "Gabriel", undefined ],
{ _id: 4, names: [ "Alice", "Charu" ] }
]
db.people.find( { name: null } )

在 MongoDB 8.0之前,前面的查询将匹配符合以下条件的文档:

  • name字段为null ( _id: 1 )

  • name字段为 undefined 或包含 undefined大量元素(_id: 2_id: 3

  • name字段不存在 ( _id: 4 )

从MongoDB 8.0 开始,前面的查询不匹配 name字段为 undefined 或包含 undefined大量元素的文档。该查询仅匹配符合以下条件的文档:

  • name字段为 null 或包含 null大量元素 ( _id: 1 )

  • name字段不存在 ( _id: 4 )

此查询行为更改还会影响以下操作:

  • $eq

  • $in

  • $lookup ,因为null本地字段不再与undefined外部字段匹配。

要学习;了解如何重写查询或迁移数据以考虑此行为更改,请参阅迁移未定义的数据和查询。

已弃用
说明
LDAP

从MongoDB 8.0开始, LDAP身份验证和授权已弃用。 LDAP可用并将在MongoDB 8的整个生命周期内继续运行而不进行更改。 LDAP将在未来的主要发布中删除。

有关更多详细信息,请参阅LDAP弃用。

LDAP迁移信息将在将来提供。

对冲读 (Hedged Reads)

从 MongoDB 8.0开始,对冲读已弃用。 默认情况下,指定读取偏好nearest的查询不再使用对冲读。 如果您明确指定对冲读,MongoDB 会执行对冲读并记录警告。

索引筛选器

在版本8.0中已弃用。

从 MongoDB 8.0开始,使用查询设置而不是添加索引筛选器。 从 MongoDB 8.0开始,索引筛选器已弃用。

查询设置的功能比索引筛选器更多。 此外,索引筛选器不是持久性的,您无法轻松地为所有集群节点创建索引筛选器。 要添加查询设置并探索示例,请参阅setQuerySettings

服务器端JavaScript函数

从MongoDB 8.0开始,服务器端JavaScript函数( $accumulator$function$where )已弃用。 运行这些函数时, MongoDB会记录警告。

tcmallocAggressiveMemoryDecommit
MongoDB 8.0不建议使用tcmallocAggressiveMemoryDecommit参数。
enableFinerGrainedCatalogCacheRefresh
MongoDB 8.0不建议使用enableFinerGrainedCatalogCacheRefresh参数。
timeField 在时间序列集合的分分片键中

从MongoDB 8.0开始,不推荐使用timeField作为时间序列集合中的分分片键。

cleanupOrphaned
MongoDB 8.0弃用了cleanupOrphaned命令。 要确认没有剩余孤立文档,请改用$shardedDataDistribution
rangePreview

从MongoDB 8.0 开始,rangePreview Queryable Encryption算法已弃用并删除。请改用 Range算法。

如果您的Queryable Encryption集合使用 rangePreview ,则必须删除该集合才能升级到MongoDB 8.0 。

从MongoDB 8.0开始,您只能在分片上运行某些命令。 如果您尝试直接连接到分分片并运行不受支持的命令, MongoDB将返回错误:

"You are connecting to a sharded cluster improperly by connecting directly
to a shard. Please connect to the cluster via a router (mongos)."

要直接对分片运行不支持的数据库命令,您必须连接到mongos或具有仅维护的directShardOperations角色。

MongoDB允许直接对分片运行命令,从而支持从副本集到1分分片集群的在线分片。 但是,一旦集群具有多个分分片,则只有列出的命令可以直接针对分片片运行,而不需要仅维护的directShardOperations角色。

从MongoDB 8.0开始,当大多数副本集成员已写入更改的oplog条目时,使用"majority"写关注(write concern)的写入操作会返回确认。 这提高了"majority"写入的性能。 在以前的版本中,这些操作将等待,并在大多数副本集成员应用更改后返回确认。

从MongoDB 8.0开始,从节点并行为每个批处理写入和应用oplog条目。 这对metrics.repl.buffer状态指标进行了破坏性变更 (breaking change),因为它现在提供有关两个缓冲区(而不是一个)的信息。

MongoDB 8.0弃用了以下服务器状态指标:

它将它们替换为以下指标:

从 MongoDB 8.0 开始,Bulk.insert() 和数据提取工作负载可能表现得更好。不过,在运行这些工作负载之后立即关闭 MongoDB 可能需要更长的时间,因为在将额外的数据刷新到磁盘上。

从 MongoDB 8.0开始,如果您尝试对同一集合运行多个并发compact命令,MongoDB 会返回错误。

从 MongoDB 8.0开始,不能将地理空间查询与格式错误的输入一起使用。 在以前的版本中,某些地理空间查询接受格式错误的输入而不会出现错误。

从 MongoDB 8.0 开始,当定义了多个身份提供程序 (IDP) 时,只要 audience 值对于每个发布者都是唯一的,oidcIdentityProviders 参数就会接受重复的 issuer 值。在版本 7.3 和 7.0 中,也可以使用此功能。

从MongoDB 8.0开始, wiredTiger.concurrentTransactions重命名为queues.execution

从 MongoDB 8.0 开始,当计算排名时,null$denseRank$rank sortBy 操作中的缺失字段值将被同等对待。这一更改将使 denseRankrank 的行为与 $sort 一致。

从 MongoDB8.0 $shardedDataDistribution开始,仅当主分片包含数据段或 孤立文档 时, 才会返回集合 主 分片的输出。

有关详细信息,请参阅$shardedDataDistribution

从 MongoDB 8.0 开始,MongoDB 使用升级版 TCMalloc,此版本使用每 CPU 缓存而不是每线程缓存,以减少内存碎片,并使数据库对高压工作负载更有弹性。

要使用性能更优的新 TCMalloc,请参阅针对自托管部署的 TCMalloc 性能优化。

后退

8.0 (稳定版本)