MongoDB中的限制与阈值
本文档提供了MongoDB系统的各种硬性和 软性限制。
BSON文档大小
BSON的最大文档大小为16MB。
最大文档大小有助于确保单个文档不会使用过多的RAM或在传输过程中占用过多的带宽。要存储大于该限制的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参阅mongofiles和驱动程序的文档。
BSON文档的嵌套深度
数据库名称的大小写敏感性
由于数据库名称在MongoDB中_不区分大小写_,因此数据库名称不能仅因字符的大小写而不同。
Windows环境下的数据库名称限制
对于在Windows上运行的MongoDB环境,数据库名不能包含以下任意一个字符:
/\. "$*<>:|?
另外,数据库名不能包含空字符。
Unix/Linux系统中的数据库名称限制
对于在Unix和Linux系统上运行的MongoDB环境,数据库名不能包含以下任意一个字符:
`/\. "$`
同样的,数据库名不能包含空字符。
数据库名称的长度
数据库名不能为空并且必须小于64个字符。
集合名称的限制
集合名必须以下划线或者字母符号开始,并且_不能_:
- 包含
$
; - 为空字符串(比如
""
); - 包含空字符;
- 以
system.
为前缀(这部分表保留给内部使用);命名空间长度: - 对于fCV设置为**
"4.4"
及以上的集群,MongoDB会将对集合/视图名称空间的限制提高到255个字节。对于集合或视图,命名空间包括数据库名称、点号(.
)分隔符和集合/视图名称(例如<database>.<collection>
**);
字段名称的限制
- 字段名称不能包含空字符。
- 顶级字段名称不能以美元符号(
$
)字符开头。此外,从MongoDB 3.6开始,服务器允许存储包含点(即.
)和美元符号(即$
)的字段名称。重要MongoDB查询语言无法始终对字段名称包含这些字符的文档查询进行有效地表达(请参阅SERVER-30575)。 在查询语言添加相关支持之前,建议不要在字段名称中包含.
和$
,并且不受MongoDB官方驱动程序支持。警告MongoDB does not support duplicate field namesMongoDB不支持重复的字段名称MongoDB查询语言对于具有重复字段名称的文档是未定义的。BSON构建器可能支持使用重复的字段名称创建BSON文档。尽管BSON构建器可能不会抛出错误,但是_即使_插入操作返回成功,也不支持将这些文档插入MongoDB。例如,通过MongoDB驱动程序插入具有重复字段名称的BSON文档可能会导致驱动程序在插入之前静默删除重复值。
命名空间长度
索引键的限制
对于从MongoDB 2.6到将fCV设置为**
"4.2"
**或更早的MongoDB版本,索引条目的_总大小_必须_小于_1024字节,该总大小可能包括结构体开销,具体取决于BSON类型。- 如果索引字段的索引条目超过索引键限制,则重新索引操作将出错。重新索引操作是compact命令以及db.collection.reIndex()方法的一部分,因为这些操作会删除集合中的_所有_索引,然后按顺序重新创建它们,所以索引键限制中的错误阻止了这些操作的重建集合的所有剩余索引。
每个集合中的索引个数
单个集合内_不能超过_64个索引。
索引名称长度
在将fCV设置为**
"4.0"
**及以下的MongoDB或MongoDB的早期版本中,标准的索引名称,包括名称空间和点分隔符(即<database name>.<collection name>.$<index name>
),不能超过127个字节。默认情况下,
<index name>
是字段名称和索引类型的串联。您可以为createIndex()
方法显式指定<index name>
,以确保标准索引名称不超过限制。复合索引的字段数量
复合索引中所包含的字段不能超过32个。
查询不能同时使用文本索引和地理空间索引
具有2dsphere索引的字段只能保存几何数据
WiredTiger存储引擎从覆盖查询返回的NaN值始终为double类型
如果从索引覆 盖的查询返回的字段的值为NaN,则该NaN值的类型_始终_为double。
多键索引
多键索引不能覆盖对数组字段的查询。
地理位置索引
地理位置索引无法覆盖查询。
索引构建中的内存使用情况
createIndexes支持在集合上构建一个或多个索引。createIndexes使用内存和磁盘上的临时文件的组合来完成索引构建。createIndexes的内存使用量的默认限制是200MB(对于4.2.3和更高版本)和500MB(对于4.2.2和更早版本),这是使用单个createIndexes命令构建的所有索引之间共享的。一旦达到内存限制,createIndexes将使用--dbpath指定的目录中名为
_tmp
子目录中的临时磁盘文件来完成构建。您可以通过设置maxIndexBuildMemoryUsageMegabytes这一服务器参数来覆盖该内存限制。设置更高的内存限制可能会导致索引构建更快地完成。但是,相对于系统上未使用的RAM设置此限制过高会导致内存耗尽和MongoDB服务停止。
4.2版本有更新
- 初始化同步操作一次仅填充一个集合,并且没有超过内存限制的风险。但是,用户可能会同时在多个数据库中的多个集合上启动索引构建,并且可能消耗的内存量大于maxIndexBuildMemoryUsageMegabytes中设置的限制。提示
字节序和索引类型
- 提示为了在一个包含非简单字节序的集合上创建一个
text
,2d
或geoHaystack
索引,您必须在创建索引时显示指定collation: {locale: "simple"}
。
隐藏索引