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, name2: "Alice" }
db.people.find( { name: null } )

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

  • name字段为null ( _id: 1 )

  • name字段为undefined ( _id: 2 )

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

从 MongoDB 8.0开始,前面的查询与name字段为undefined ( _id: 2 ) 的文档不匹配。

要匹配nameundefined的文档,您必须在查询中显式指定undefined类型。例如,以下查询会返回所有样本文档:

db.people.find( {
$or: [
{ name: null },
{ name: { $type: "undefined" } }
]
} )

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

  • $eq

  • $in

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

已弃用
说明
LDAP

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

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

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

对冲读

从 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

从 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"写关注的写入操作会返回确认。这提高了"majority"写入的性能。在以前的版本中,这些操作将等待,并在大多数副本集成员应用更改后返回确认。

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

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