参考 > 发行说明 > MongoDB 2.6发行说明 > MongoDB 2.6中的兼容性更改
在本页面
以下2.6更改可能会影响与旧版MongoDB的兼容性。有关2.6更改的完整列表,请参阅MongoDB 2.6发行说明。
MongoDB 2.6对上的限制实施了更强大的实施
。index key
如果现有文档中的索引键超出限制,则创建索引将出错:
db.collection.ensureIndex(),
db.collection.reIndex(),compact,和
repairDatabase会报错,而不是创建索引。MongoDB的早期版本将创建索引,但不会为此类文档建立索引。db.collection.reIndex(),compact和会repairDatabase删除集合中的所有索引,然后按顺序重新创建它们,所以索引键限制中的错误会阻止这些操作为该集合重建任何剩余的索引,并且对于该repairDatabase命令,将阻止继续执行其余的索引
。过程。插入错误:
db.collection.insert()并执行插入物(例如其他操作db.collection.save()和
db.collection.update()与upsert该结果在插入)将无法插入如果新文档具有一个索引字段,其对应的索引条目超出了限制。MongoDB的早期版本将插入但不会索引此类文档。mongorestoremongoimport如果新文档的索引字段的索引条目超出限制,则将无法插入。更新将错误:
db.collection.update()并
db.collection.save()在索引字段操作如果更新的值会导致索引条目超过极限就会报错。块迁移将失败:
副本集的次要成员将警告:
mongoShell 连接到您的MongoDB 2.4数据库并运行该方法。如果您具有现有数据集,并且想要禁用默认索引键长度验证,以便可以在解决这些索引问题之前进行升级,请使用failIndexKeyTooLong参数。
在MongoDB 2.6中,当索引键指向一个空字段时,例如,或者字段名称以美元符号()开头,创建和重新索引操作将失败。"a..b" : 1$
db.collection.ensureIndex() 不会使用无效或空的键名称创建新索引。db.collection.reIndex(),compact以及
repairDatabase将如果一个指数具有无效或空键名称存在错误。MongoDB的早期版本允许索引。
mongoShell 连接到您的MongoDB 2.4数据库并运行该方法。ensureIndex与现有索引¶db.collection.ensureIndex() 现在错误:
如果您尝试创建现有索引但具有不同的选项;例如在下面的示例中,第二个
db.collection.ensureIndex()将出错。
如果指定的索引名称已经存在,但键的规格不同;例如在下面的示例中,第二个
db.collection.ensureIndex()将出错。
以前的版本没有创建索引,但是没有错误。
mongo外壳写入方法
db.collection.insert(),db.collection.update(),
db.collection.save()和db.collection.remove()
现在整合写入关注
直接进入方法,而不是一个单独的
getLastError命令,以提供写入确认是否在交互运行
mongo的脚本壳或以非交互方式。在以前的版本中,这些方法表现出“一劳永逸”的行为。
[1]mongo使用这些方法的Shell的现有脚本现在将等待确认,该确认花费的时间比以前的“一劳永逸”行为更长。WriteResult对象,其中包含操作结果,包括任何写错误和写关注错误,并且无需调用
getLastError命令来获取结果的状态。见db.collection.insert(),
db.collection.update(),db.collection.save()
并db.collection.remove()了解详细信息。mongos不再支持“解雇”行为。将数据写入分片群集时,这会限制吞吐量。| [1] | 在以前的版本中,当以mongo交互方式使用外壳程序时,mongo外壳程序会getLastError在write方法之后自动调用
命令以提供对写入的确认。但是,除非脚本在write方法之后包含对命令的显式调用,否则脚本将在以前的版本中观察到“即发即弃”的行为
getLastError。 |
db.collection.aggregate()变更¶Shell中的db.collection.aggregate()方法
mongo默认为将游标返回到结果集。此更改使聚合管道可以返回任何大小的结果集,并且需要迭代游标才能访问结果集。例如:
早期版本返回的单个文档的字段results
包含结果集数组,但要遵守BSON文档的大小限制。访问MongoDB早期版本中的结果集需要访问该
results字段并迭代该数组。例如:
db.collection.aggregate()返回带有results数组的文档的
脚本
来代替处理游标。也可以看看
MongoDB 2.6 授权模型更改了MongoDB存储和管理用户特权信息的方式:
确保管理数据库中至少存在一个用户。如果管理数据库中没有用户,请添加用户。然后升级到MongoDB 2.6。最后,升级用户权限模型。请参阅将 MongoDB升级到2.6。
重要
在升级授权模型之前,您应该首先将MongoDB二进制文件升级到2.6。对于分片群集,请确保所有
群集组件均为2.6。如果任何数据库中都有用户,则在升级MongoDB二进制文件之前,请确保数据库中至少有一个admin具有该角色的
用户。userAdminAnyDatabase
也可以看看
CN)和“使用者备用名”(SAN)字段,以确保CN该SAN条目或其中之一与服务器的主机名匹配。因此,如果您当前使用SSL,并且当前SSL证书
的或任何条目都不与主机名匹配,则升级到2.6版将导致SSL连接失败。CNSAN为了允许继续使用这些证书,MongoDB提供了该allowInvalidCertificates设置。该设置可用于:
mongod并mongos绕过群集中其他服务器上SSL证书的验证。mongo外壳程序,支持SSL的MongoDB工具和C ++驱动程序绕过服务器证书的验证。使用allowInvalidCertificates设置时,MongoDB会记录使用无效证书的警告。
警告
该allowInvalidCertificates设置会绕过其他证书验证,例如检查过期和有效签名。
2dsphere索引版本2¶MongoDB 2.6引入了2dsphere索引的版本2 。如果文档缺少2dsphere
索引字段(或者该字段是null或为空数组),则MongoDB不会将文档条目添加到2dsphere索引中。对于插入,MongoDB插入文档但不添加到
2dsphere索引中。
以前的版本不会在2dsphere
索引字段为a null或为空数组的情况下插入文档。对于缺少2dsphere索引字段的文档,以前的版本将插入文档并为其建立索引。
2dsphere索引以创建版本1索引。但是,版本1索引不能使用新的GeoJSON几何。{
"2dsphereIndexVersion" : 1 }也可以看看
bindIpRPM / DEB软件包的默认值¶bindIp值重视的MongoDB组件localhost接口只。这些软件包在默认配置文件(即/etc/mongod.conf。)中设置了此默认值。/etc/mongod.conf文件,则需要bindIp
在升级之前或升级过程中进行设置。bindIp其他任何官方MongoDB软件包中均没有默认设置。
globalopcounts为
globalOpcounts。globalopcounts到globalOpcounts。db.collection.remove()需要查询文档作为参数。在以前的版本中,没有查询文档的方法调用会删除集合中的所有文档。db.collection.remove()没有查询文档的现有调用,请修改这些调用以包括一个空文档
db.collection.remove({})。更新运算符(例如$ set) 必须指定一个非空的操作数表达式。例如,以下表达式现在无效:
更新运算符(例如$ set) 不能在更新语句中重复。例如,以下表达式无效:
"")的字段。.)或以美元符号($)开头的字段名称的字段名称。"",请替换整个文档。请参阅db.collection.update()
和db.collection.save()了解有关替换现有文档的详细信息。.)的字段的现有文档,请替换整个文档或unset该字段。要查找名称中包含点的字段,请运行
db.upgradeCheckAllDBs()。$)开头的字段的现有文档,unset或rename这些字段。要查找名称以美元符号开头的字段,请运行db.upgradeCheckAllDBs()。有关写操作协议的更改,请参阅“ 新写操作协议”;有关插入和更新操作的更改,请参见“ 插入和更新改进 ”。还请考虑的文档。Restrictions on Field Names
$)开头的字段上指定条件。Unset或rename名称以美元符号($)开头的现有字段。运行
db.upgradeCheckAllDBs()以查找名称以美元符号开头的字段。如果稀疏索引导致查询和排序操作的结果集不完整,除非hint()明确指定索引,否则MongoDB将不会使用该索引。
例如,除非明确提示,查询将不再在字段上使用稀疏索引。{ x: { $exists: false } }x
hint()。有关详细说明新行为的示例,请参见集合上的稀疏索引无法返回完整结果。
sort()规范值¶explain()保留查询计划缓存¶也可以看看
该PlanCache()参考。
$maxDistance变更¶对于$nearGeoJSON数据查询,如果查询指定$maxDistance,则$maxDistance必须在$near文档中。
在以前的版本中,$maxDistance可以在$near文档内部或外部。
$maxDistance 必须为正值。