参考 > 发行说明 > MongoDB 3.0发行说明 > MongoDB 3.0中的兼容性更改
以下3.0更改可能会影响与旧版本MongoDB的兼容性。有关3.0更改的完整列表,请参阅MongoDB 3.0发行说明。
随着3.0中附加存储引擎的引入,一些 配置文件选项 已更改:
| 先前的设定 | 新设定 |
|---|---|
storage.journal.commitIntervalMs |
storage.mmapv1.journal.commitIntervalMs |
storage.journal.debugFlags |
storage.mmapv1.journal.debugFlags |
storage.nsSize |
storage.mmapv1.nsSize |
storage.preallocDataFiles |
storage.mmapv1.preallocDataFiles |
storage.quota.enforced |
storage.mmapv1.quota.enforced |
storage.quota.maxFilesPerDB |
storage.mmapv1.quota.maxFilesPerDB |
storage.smallFiles |
storage.mmapv1.smallFiles |
3.0 mongod实例与现有配置文件向后兼容,但是如果您尝试使用旧设置,则会发出警告。
目录中的dbPath文件必须对应于已配置的存储引擎(即--storageEngine)。
mongod如果dbPath包含由以外的其他存储引擎创建的数据文件,
则不会启动--storageEngine。
也可以看看
在将MongoDB升级到3.0中将存储引擎更改为WiredTiger部分
对于使用WiredTiger存储引擎的MongoDB 3.0部署,当在早期版本的mongoShell或驱动程序中发出以下操作时,以下操作不返回任何输出:
db.getCollectionNames()db.collection.getIndexes()show collectionsshow tables连接到使用WiredTiger的3.0 实例时,请使用3.0 mongo外壳程序或官方驱动程序的3.0兼容版本mongod。2.6.8 mongoShell也与mongod使用WiredTiger的3.0 实例兼容
。
db.fsyncLock()与WiredTiger不兼容¶使用WiredTiger时,db.fsyncLock()and
db.fsyncUnlock()操作不能保证数据文件不会更改。因此,请勿为了创建备份而使用这些方法来确保一致性。
MongoDB 3.0不再支持动态记录分配,并且不建议使用 paddingFactor。
MongoDB 3.0不推荐使用该newCollectionsUsePowerOf2Sizes
参数,因此您不能再使用该参数来禁用集合的2种大小分配的功效。而是将
collMod与该noPadding
标志一起使用,或将db.createCollection()方法与该noPadding
选项一起使用。仅为noPadding工作负载仅包含插入或就地更新(例如递增计数器)的集合设置。
警告
只设置noPadding到true了集合其工作量有没有更新操作是造成文件增长,如与嵌件仅工作负载集合。有关更多信息,请参见无填充分配策略。
有关更多信息,请参见MMAPv1记录分配行为更改。
MongoDB 3.0与2.2.1之前的版本所生成的oplog条目不兼容。如果从这些版本之一升级,则必须等待新的oplog条目覆盖由这些版本之一生成的所有旧oplog条目,然后再升级到3.0.0或更早版本。
如果辅助节点使用索引构建操作重播2.6之前的操作日志,而该操作在2.6或更高版本的主节点上失败,则辅助节点可能会中止。
MongoDB 3.0提供了对副本集配置设置和副本集无效副本集配置的更严格的验证。
更严格的验证包括:
1投票。以前,仲裁者也可以具有0for
的值members[n].votes。如果仲裁器以外的值1了
members[n].votes,你必须确定设置。0或者1对
members[n].votes。如果非仲裁员成员具有的其他任何值
members[n].votes,则必须修正此设置。_id在
副本集配置必须指定为通过指定的名称相同--replSet或
replication.replSetName。否则,您必须修复设置。0对
settings.getLastErrorDefaults价值。如果
settings.getLastErrorDefaults值为
0,则必须修正设置。settings只能包含可识别的设置。以前,MongoDB会忽略无法识别的设置。如果
settings包含无法识别的设置,则必须删除无法识别的设置。要在升级到MongoDB 3.0之前修复设置,请连接到主数据库,并将reconfigure副本集设置为有效的配置设置。
如果您已经升级到MongoDB 3.0,则必须先降级到MongoDB 2.6,然后修复设置。一旦你reconfigured的副本集,您可以重新升级到MongoDB的3.0。
local.slaves集合¶MongoDB 3.0会删除local.slaves跟踪次要复制进度的集合。若要跟踪复制进度,请使用rs.status()方法。
从FATAL3.0.0版本开始,副本集状态不存在。
HTTP接口(即net.http.enabled)不再报告复制数据。
3.0版本的MongoDB工具mongodump,
mongorestore,mongoexport,
mongoimport,mongofiles,和
mongooplog,必须连接到运行的MongoDB实例,这些工具不能直接修改数据文件与--dbpath
在以前的版本。mongod
使用这些工具之前,请确保您启动了实例。
--dbpath,--journal以及--filter对选项
mongodump,mongorestore,mongoimport,
mongoexport,和bsondump。--locks选项mongotop。--noobjcheck了bsondump和的
选项mongorestore。--csv选项mongoexport。使用新
--type选项指定导出格式类型(csv或json)。也可以看看
releaseConnectionsAfterResponse参数¶现在,MongoDB总是在响应后释放连接。
releaseConnectionsAfterResponse参数不再可用。
MongoDB 3.0完全删除了对不推荐使用的2.4用户模型的支持。如果存在使用2.4模式的用户数据(即,authSchema版本小于)
,则MongoDB 3.0将退出并显示一条错误消息3。
要验证现有2.6模式的版本,请查询数据库中的
system.version集合admin:
注意
您必须具有查询集合的特权。
如果您当前正在使用auth并且具有架构版本2或3,则查询将返回currentVersion现有的authSchema。
如果您当前没有任何用户或使用
authSchema版本1,则查询将不返回任何结果。
如果您的authSchema版本小于3或查询未返回任何结果,请参阅升级用户授权数据为2.6格式以authSchema在升级到MongoDB 3.0之前升级版本。
将MongoDB从2.6升级到3.0后,若要使用新的SCRAM-SHA-1
质询-响应机制(如果您已有用户数据),则需要再次升级身份验证架构。这会将MONGODB-CR用户模型升级到SCRAM-SHA-1用户模型。有关详细信息,请参见
升级到SCRAM。
在3.0中,更改了localhost异常,以便这些连接只能
访问在admin
数据库上创建第一个用户。在以前的版本中,使用localhost异常获得访问权限的连接对MongoDB实例的访问不受限制。
有关更多信息,请参见Localhost异常。
db.addUser()删除¶3.0删除了传统db.addUser()方法。使用
db.createUser()和db.updateUser()代替。
MongoDB 3.0
为和引入了新的net.ssl.allowConnectionsWithoutCertificates
配置文件设置和--sslAllowConnectionsWithoutCertificates命令行选项。这些选项替换了先前的和
选项,后者已成为别名。更新您的配置以确保将来的兼容性。mongodmongosnet.ssl.weakCertificateValidation--sslWeakCertificateValidation
默认情况下,以SSL模式运行时,MongoDB实例仅
在其证书(即net.ssl.PemKeyFile)有效时启动。您可以使用net.ssl.allowInvalidCertificates设置或
--sslAllowInvalidCertificates命令行选项禁用此行为
。
要使用启动mongo外壳程序--ssl,必须
在启动时显式指定--sslCAFileor --sslAllowInvalidCertificates选项。有关更多信息,请参见客户端的TLS / SSL配置。
默认情况下,MongoDB会根据那些证书中列出的主机名来验证尝试使用证书进行连接的主机的主机名。在某些部署情况下,此行为可能是不希望的。现在可以禁用这种主机名验证,而无需使用net.ssl.allowInvalidHostnames设置或
--sslAllowInvalidHostnames命令行选项来禁用其余证书信息的验证
。
mongoShell版本兼容性¶mongo3.0之前的Shell 版本
与实施访问控制的MongoDB 3.0部署不兼容。如果您有需要访问控制的3.0 MongoDB部署,则必须使用3.0版本的mongo
Shell。
HTTP状态接口和REST API都不支持3.0版中引入的 SCRAM-SHA-1质询-响应用户身份验证机制。
dropDups选项¶dropDups选项不再可用
createIndex(),
ensureIndex()和createIndexes。
对于3.0 mongod实例,如果在mongod进程终止时正在进行后台索引构建,则在实例重新启动时,索引构建将作为前台索引构建重新启动。如果索引构建遇到任何错误,例如重复键错误,mongod则将退出并显示错误。
要mongod在索引构建失败后启动,请使用
storage.indexBuildRetry或--noIndexBuildRetry在启动时跳过索引构建。
2d索引和地理空间附近查询¶batchSize()不再类似于指定a limit()。对于$nearSphere使用2d索引的查询,MongoDB不再使用100个文档的默认限制。
每个官方支持的驱动程序都发布了一个版本,其中包括对MongoDB 3.0中引入的所有新功能的支持。强烈建议在升级过程中升级到其中一个版本。
由于功能更改,在某些情况下必须升级驱动程序:
SCRAM-SHA-1身份验证方法listIndexes或
listCollections最低3.0兼容的驱动程序版本是:
| 驱动语言 | 最低3.0兼容版本 | 驱动语言 | 最低3.0兼容版本 |
|---|---|---|---|
| C | 1.1.0 | 佩尔 | 1.0.0 |
| C ++ | 1.0.0 | 的PHP | 1.0 |
| C# | 1.10 | python | 2.8 |
| 爪哇 | 2.13 | 发动机 | 0.4 |
| Node.js | 1.4.29 | Ruby | 1.12 |
| 斯卡拉 | 2.8.0 |
findAndModify退货文件¶在MongoDB中3.0,与进行更新时
findAndModify也指定和
任选项未设置或,
返回在字段,如果不匹配任何文件,而不管的
规范。upsert: true newnew: falsefindAndModifynullvaluequerysort
在以前的版本中,如果为更新指定了和,并且未设置选项或
,则在字段中findAndModify返回空文档。{}valuesortupsert: truenewnew: false
upsert:true带点_id查询¶当执行update()with 和查询不匹配现有文档时,如果查询使用点表示法在字段上指定条件,则MongoDB将拒绝插入新文档
。upsert:
true_id
此限制可确保正确_id定义文档中嵌入的字段的顺序,
并且不与查询中指定的顺序绑定。
如果您尝试以这种方式插入文档,MongoDB将引发错误。例如,考虑以下更新操作。由于更新操作指定upsert:true并且查询_id使用点符号指定字段上的条件,因此在构建要插入的文档时,更新将导致错误。
system.indexes和system.namespaces¶MongoDB 3.0不赞成直接访问system.indexes和
system.namespaces收集。请使用createIndexes
和listIndexes命令。另请参见
WiredTiger和驱动程序版本兼容性。
MongoDB 3.0更一致地实施。确保您的应用程序不会创建或依赖无效的集合名称。collection naming
restrictions
在32位平台(Linux和Windows)上不再为MongoDB提供商业支持。Linux RPM和DEB软件包也不再可用。但是,二进制存档仍然可用。
以下命令和方法在MongoDB 3.0中不再可用:
closeAllDatabasesgetoptimetextindexStats,db.collection.getIndexStats()和db.collection.indexStats()MongoDB 3.0中不推荐使用以下命令和方法:
此外,您不能使用现在不建议使用的eval
命令或db.eval()方法来调用
mapReduce或db.collection.mapReduce()。
为了进行比较,MongoDB 3.0不再将时间戳和日期数据类型视为等效。取而代之的是,时间戳 数据类型的比较/排序顺序(即“更大”)比日期数据类型高。如果您的应用程序依赖于Date和Timestamp对象的等效比较/排序顺序,请在升级之前相应地修改您的应用程序。
的serverStatus命令和
db.serverStatus()方法不再返回workingSet,
indexCounters以及recordStats部分在输出中。
Unix域套接字文件权限现在默认为0700。要更改权限,MongoDB提供
net.unixDomainSocket.filePermissions设置和
--filePermission选项。
cloneCollection¶该cloneCollection命令和db.cloneCollection()
如果集合已经存在,方法将返回,而不是插入它的错误。