参考 > 发行说明 > MongoDB 4.0发行说明 > MongoDB 4.0中的兼容性更改
在本页面
以下4.0更改可能会影响与旧版MongoDB的兼容性。
MONGODB-CR
从版本4.0开始,MongoDB删除了对不赞成使用的MongoDB Challenge-Response(MONGODB-CR
)身份验证机制的支持。
从3.0版开始,MongoDB不支持MONGODB-CR
用户的创建,
除非该部署已从2.6或更早版本的部署升级,该部署已经具有MONGODB-CR
用户并且尚未升级身份验证架构。
如果您的部署中有存储在MONGODB-CR
架构中的用户凭据,则在升级到版本4.0 之前,必须先升级到Salted Challenge Response Authentication机制(SCRAM) 。有关升级到SCRAM的信息,请参阅
升级到SCRAM。SCRAM
authSchemaUpgrade
命令¶MongoDB 4.0删除了该authSchemaUpgrade
命令。该命令在MongoDB 3.0到MongoDB 3.6中可用,支持MONGDB-CR
用户到SCRAM
用户的系统的升级过程。
如果您的部署中有存储在MONGODB-CR
架构中的用户凭据,则在升级到版本4.0 之前,必须先升级到Salted Challenge Response Authentication机制(SCRAM) 。有关升级到SCRAM的信息,请参阅
升级到SCRAM。SCRAM
MONGODB-CR
从支持db.copyDatabase()
和copydb
¶该方法db.copyDatabase()
无法从mongod
强制MONGODB-CR
身份验证的实例复制
。
该命令copydb
无法从mongod
强制MONGODB-CR
身份验证的实例复制
。结合此更改,MongoDB 4.0删除了该copydbgetnonce
命令。
从MongoDB 4.0开始,如果在使用x.509身份验证时指定
--sslAllowInvalidCertificates
或
(或在MongoDB 4.2中为别名或
),则无效的证书仅足以建立TLS / SSL连接,但不足以进行身份验证。net.ssl.allowInvalidCertificates: true
--tlsAllowInvalidateCertificates
net.tls.allowInvalidCertificates: true
如果您使用无效的证书执行x.509身份验证,请将您的证书更新为有效的证书。例如,您可以注册您现有的证书与信任的CA,或者如果使用自定义的CA,使用指定CA net.ssl.CAFile
。
pv0
副本集¶从版本4.0开始,MongoDB删除不推荐使用的副本集协议版本0 pv0
。
在升级到MongoDB 4.0之前,您必须升级到pv1
。
要升级到pv1
,请将mongo
外壳连接到主副本集,然后执行以下操作序列:
为了减少w:1
回滚的可能性,您还可以将副本集重新配置为更高的
settings.catchUpTimeoutMillis
设置。
有关的详细信息pv1
,请参阅
副本集协议版本。
MongoDB 4.0删除了对不赞成使用的主从复制的支持。在升级到MongoDB 4.0之前,如果您的部署使用主从复制,则必须升级到副本集。
要将主从复制转换为副本集,请参阅 将主从部署转换为副本集。
从MongoDB 4.0开始,您无法指定--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
不能指定--noIndexBuildRetry
或storage.indexBuildRetry
与
--replSet
或
replication.replSetName
。也就是说,你不能使用
--noIndexBuildRetry
或者
storage.indexBuildRetry
一个mongod
实例是副本集的一部分。
MongoDB 4.0消除了对可回滚的数据量的限制
。在以前的版本中,一个mongod
实例将不会回滚超过300兆字节的数据,并且如果需要回滚超过300兆字节的数据,则需要手动干预。
从MongoDB 4.0开始,回滚时间限制默认为1天,并且可以使用new参数进行配置
rollbackTimeLimitSecs
。在早期版本中,回滚时间限制是不可配置的,并且设置为30分钟。
mongos
"majority"
对以下影响分片群集元数据的操作使用写关注:
4.0
功能兼容性¶4.0中的某些功能不仅需要4.0二进制文件,还需要
featureCompatibilityVersion
设置为4.0
。这些功能包括:
$near
,
$nearSphere
现在支持对分片集合进行查询。create
命令(和mongo
外壳db.createCollection()
法),你不能设置选项autoIndexId
,以false
在比其他数据库创建集合时local
数据库。listDatabases
没有命令
listDatabases
操作权限返回其上运行该命令的用户拥有的所有数据库的列表
find
动作特权。在以前的版本中,在不执行listDatabases
操作的情况下运行命令会导致Unauthorized
响应。taskExecutorPoolSize
更改
0
为1
。在Linux上,要恢复4.0部署的先前行为,请将设置taskExecutorPoolSize
为,0
并将
AsyncRequestsSenderUseBaton设置
为false
。transportLayer
,并
net.transportLayer
以legacy
对的mongod和
mongos实例。该transportLayer
设置将自动设置为asio
且无法修改。reIndex
命令及其助手db.collection.reIndex()
使用a 并将阻止其他操作,直到完成为止。Global
exclusive (W) lock
year
,isoYear
和timezone
是在有效范围之外,
$dateFromParts
携带或减去从其它日期的差来计算的日期。在以前的版本中,超出范围的值将导致错误。killCursors
特权操作的行为已更改。在MongoDB 4.0之前,如果用户知道该游标的ID,则可以杀死该游标。从MongoDB 4.0开始,该killCursors
特权授予用户杀死与当前经过身份验证的用户关联的任何游标的能力。如果用户无权杀死游标,则killCursors
返回错误。killAnyCursor
特权操作,该操作授予用户杀死指定集合的任何游标的权限。mongos
尝试连接功能兼容版本(fCV)大于的mongod
实例
时,二进制文件将崩溃。例如,您无法将MongoDB 4.0版本连接到fCV设置为4.2 的4.2分片群集。但是,您可以将MongoDB 4.0版本连接
到fCV设置为4.0 的4.2分片群集。mongos
mongos
mongos
localhost
配置的IP地址,而不是假设127.0.0.1
。MongoDB二进制文件(mongod
,mongos
和
mongo
)在提供TLS 1.1+的系统上禁用对TLS 1.0加密的支持。
如果您需要支持TLS 1.0:
对于mongod
情况下,你可以指定none
到
net.ssl.disabledProtocols
或
。--sslDisabledProtocols none
对于mongos
情况下,你可以指定none
到
net.ssl.disabledProtocols
或
。--sslDisabledProtocols none
对于mongo
外壳,您可以指定
。--sslDisabledProtocols none
该--sslDisabledProtocols
选项可用于以下mongo
外壳程序:
在macOS上,要将mongo
外壳版本3.6.4或更早版本连接到MongoDB 4.0+部署,需要显式启用TLS 1.0。
Windows上的MongoDB Enterprise不再支持AES256-GCM
。该密码现在仅在Linux上可用。
mongo
壳¶show collections
¶从mongo
Shell的4.0版本开始,等效于:show
collections
show collections
show collections
当4.0版mongo
外壳连接到较早版本的MongoDB部署不支持
authorizedCollections
和nameOnly
选项,
listCollection
。show
collections
authenticatedUserPrivileges
connectionStatus
db.getCollectionNames()
¶从mongo
Shell的4.0版本开始,
db.getCollectionNames()
等效于:
listCollections
对数据库操作权限的特权
),该方法列出数据库的所有集合的名称。find
使用数据库中的特定集合,则该方法将仅返回该集合。mongoperf
¶MongoDB 4.0删除了mongoperf
二进制文件。
copydb
和clone
命令¶MongoDB 4.0不赞成copydb 和clone命令及其 mongo shell帮助器 db.copyDatabase()和 db.cloneDatabase()。
作为替代方案,用户可以使用mongodump
和
mongorestore
(以及mongorestore
选项
--nsFrom
和--nsTo
)或使用驱动程序编写脚本。
例如,要将test
数据库从在默认端口27017上运行的本地实例复制到examples
同一实例上的数据库,您可以:
用于mongodump
将test
数据库转储到归档文件mongodump-test-db
:
mongorestore
与--nsFrom
和--nsTo
一起使用以从存档中恢复(更改数据库名称):
小费
根据需要包括其他选项,例如指定uri或主机,用户名,密码和身份验证数据库。
另外,也可以不使用存档文件,而可以
mongodump
将test
数据库连接到标准输出流,并通过管道传递到mongorestore
:
$isolated
运算符¶MongoDB放弃了对$isolated
运营商的支持。如果您已有一个包含$isolated
运算符的局部索引或一个包含运算符的视图,请$isolated
在升级之前重新创建索引或视图,而在定义中不包含运算符。
代替$isolated
操作员,而使用事务。
maxScan
选项¶MongoDB弃用了maxScan
该find
命令和mongo
Shell帮助程序
的选项cursor.maxScan()
。而是使用maxTimeMS
option或helper cursor.maxTimeMS()
。
不建议使用以下返回的字段replSetGetStatus
:
使用replSetGetStatus.replSetGetStatus.syncSourceHost
和
replSetGetStatus.members[n].syncSourceHost
代替。
在$currentOp
聚合阶段,
currentOp
命令,和db.currentOp()
助手不再返回threadId
其输出领域。
serverStatus
现在,该命令始终返回0
该asserts.warning
字段。