参考 > 发行说明 > 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--tlsAllowInvalidateCertificatesnet.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) lockyear,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分片群集。mongosmongosmongoslocalhost配置的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¶从mongoShell的4.0版本开始,等效于:show
collections
show collectionsshow collections当4.0版mongo外壳连接到较早版本的MongoDB部署不支持
authorizedCollections和nameOnly选项,
listCollection。show
collectionsauthenticatedUserPrivilegesconnectionStatusdb.getCollectionNames()¶从mongoShell的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
命令和mongoShell帮助程序
的选项cursor.maxScan()。而是使用maxTimeMSoption或helper cursor.maxTimeMS()。
不建议使用以下返回的字段replSetGetStatus:
使用replSetGetStatus.replSetGetStatus.syncSourceHost和
replSetGetStatus.members[n].syncSourceHost代替。
在$currentOp聚合阶段,
currentOp命令,和db.currentOp()助手不再返回threadId其输出领域。
serverStatus现在,该命令始终返回0该asserts.warning字段。