MongoDB-CN-Manual
  • MongoDB中文手册|官方文档中文版
  • MongoDB用户手册说明
  • MongoDB简介
    • 入门
    • 数据库和集合
      • 视图
      • 按需物化视图
      • 封顶集合
      • 时间序列集合
    • 文档
    • BSON类型
      • Comparison and Sort Order
      • MongoDB Extended JSON (v2)
      • MongoDB Extended JSON (v1)
  • 安装 MongoDB
    • 安装MongoDB社区版
      • 在Linux上安装MongoDB社区版
      • 在macOS上安装MongoDB社区版
      • 在Windows上安装MongoDB社区版
    • 安装MongoDB企业版
      • 在Linux上安装MongoDB企业版
      • 在Mac OS安装MongoDB企业版
      • 在Windows安装MongoDB企业版
      • 使用Docker安装MongoDB企业版
    • 将社区版MongoDB升级到企业版MongoDB
    • 验证MongoDB软件包的完整性
  • The mongo Shell
    • 配置mongo Shell
    • 使用 mongo Shell帮助
    • 为mongo Shell编写脚本
    • mongo Shell中的数据类型
    • mongo Shell 快速参考
  • MongoDB CRUD操作
    • 插入文档
      • 插入方法
    • 查询文档
      • 在mongo Shell中迭代游标
      • 从查询返回的项目字段
      • 查询嵌入式文档数组
      • 查询数组
      • 查询空字段或缺少字段
      • 查询嵌入/嵌套文档
    • 更新文档
      • 更新方法
      • 聚合管道更新
    • 删除文档
      • 删除方法
    • 地理空间查询
      • 用地理空间查询查找餐馆
      • GeoJSON对象
    • 批量写入操作
    • 可重试写入
    • 可重试读取
    • SQL到MongoDB的映射图表
    • 文本搜索
      • 文本索引
      • 文本索引操作
      • 集合管道中的文本索引
      • 文本索引语言
    • Read Concern读关注
      • 读关注 "local"
      • 读关注 "available"
      • 读关注 "majority"
      • 读关注 "linearizable"
      • 读关注 "snapshot"
    • Write Concern写关注
    • MongoDB CRUD概念
      • 原子性和事务
      • 读隔离性,一致性和近因性
        • 因果一致性和读写关注
      • 分布式查询
      • 通过findAndModify进行线性化读取
      • 查询计划
      • 查询优化
        • 评估当前操作性能
        • 优化查询性能
        • 写操作性能
        • 说明结果
      • 分析查询表现
      • Tailable 游标
  • MongoDB聚合
    • 聚合管道
      • 聚合管道优化
      • 聚合管道限制
      • 聚合管道和分片集合
      • 使用 Zip Code 数据集进行聚合
      • 使用用户首选项数据进行聚合
    • Map-Reduce
      • Map-Reduce 和分片集合
      • Map-Reduce 并发
      • Map-Reduce 示例
      • 执行增量 Map-Reduce
      • 对 Map Function 进行故障排除
      • 排除 Reduce Function 问题
      • Map-Reduce转换到聚合管道
    • 聚合参考
      • 聚合管道快速参考
      • 聚合命令
      • 聚合命令对比
      • 聚合表达式中的变量
      • SQL 到聚合映射图表
  • MongoDB数据模型
    • 数据建模介绍
    • 模式验证
    • 数据模型设计
      • 一对一嵌套关系模型
  • MongoDB事务
  • MongoDB事务
    • 驱动程序 API
    • 生产注意事项
    • 生产注意事项 (分片集群)
    • 事务操作
  • MongoDB索引
    • 单字段索引
    • 复合索引
    • 多键索引
      • 多键索引范围
    • 文本索引
      • 为文本索引指定语言
      • 指定文本索引的名称
      • 用权重控制搜索结果
      • 限制扫描条目的数量
    • 通配符索引
      • 通配符索引限制
    • 2dsphere 索引
      • 查询一个2dsphere索引
    • 2d 索引
      • 创建一个2d索引
      • 查询一个2d索引
      • 2d索引内部
      • 使用球面几何计算距离
    • geoHaystack 索引
      • 创建Haystack索引
      • 查询Haystack索引
    • 哈希索引
    • 索引特性
      • TTL 索引
        • 通过设置TTL使集合中的数据过期
      • 唯一索引
      • 部分索引
      • 不分大小写索引
      • Sparse 索引
    • 在填充的集合上建立索引
      • 在副本集上建立滚动索引
      • 在分片群集上建立滚动索引
    • 索引交集
    • 管理索引
    • 衡量索引使用
    • 索引策略
      • 创建索引来支持查询
      • 使用索引对查询结果进行排序
      • 确保索引适合RAM
      • 创建以确保选择性的查询
    • 索引参考
  • MongoDB安全
    • 安全检查列表
    • 启用访问控制
    • 身份验证
      • 用户
        • 添加用户
        • 权限认证机制
          • SCRAM
            • 用x.509证书来认证客户端
    • 审计
      • 配置审计过滤器
      • 配置审计
      • 系统事件审计消息
    • 网络和配置强化
    • 安全参考
      • system.roles集合
      • system.users集合
      • 资源文档
      • 权限操作
    • 附录
      • 附录-A-用于测试的 OpenSSl CA 证书
      • 附录-B-用于测试的OpenSSL服务器证书
      • 附录-C-用于测试的OpenSSL客户端证书
  • Change Streams变更流
    • 变更流生产建议
    • 变更事件
  • MongoDB复制
    • 副本集成员
    • 副本集日志
    • 副本集数据同步
    • 副本集部署架构
    • 副本集成员配置教程
    • 副本集维护教程
    • MongoDB复制参考
  • MongoDB分片
    • 分片集群组件
    • 分片键
    • 哈希分片
    • 范围分片
    • 区
      • 管理分片区
      • 按位置细分数据
      • 用于更改SLA或SLO的分层硬件
      • 按应用或客户细分数据
      • 仅插入工作负载的分布式本地写入
      • 管理分片区
    • 使用块进行数据分区
      • 在分片集群中拆分数据块
    • 分片管理
      • 查看集群设置
    • 重启一个分片集群
    • [把一个分片集群迁移到不同的硬件](fen-pian/migrate-a -sharded-cluster-to-different-hardware.md)
    • 分片参考
  • MongoDB管理
    • 产品说明
    • 操作检查列表
    • 开发检查列表
    • 配置和维护
    • 性能
    • 数据中心意识
      • MongoDB部署中的工作负载隔离
      • 区
        • 管理分片区
        • 按位置细分数据
        • 用于更改SLA或SLO的分层硬件
        • 按应用或客户细分数据
        • 仅插入工作负载的分布式本地写入
        • 管理分片区
    • MongoDB备份方法
    • MongoDB监控
  • MongoDB存储
    • 存储引擎
      • WiredTiger 存储引擎
      • 内存存储引擎
    • 日志记录
      • 管理日志记录
        • GridFS
        • FAQ:MongoDB 存储
  • MongoDB参考
    • 运算符
      • 查询与映射运算符
        • 比较查询运算符
          • $eq
          • $gt
          • $gte
          • $in
          • $lt
          • $lte
          • $ne
          • $nin
        • 逻辑查询运算符
          • $and
          • $not
          • $nor
          • $or
        • 元素查询运算符
        • 评估查询运算符
        • 地理空间查询运算符
        • 数组查询运算符
        • 按位查询运算符
        • $comment
        • 映射运算符
      • 更新运算符
        • 字段更新运算符
        • 数组更新运算符
        • 按位更新运算符
      • 聚合管道阶段
      • 聚合管道操作符
        • $abs (aggregation)
        • $acos (aggregation)
        • $acosh (aggregation)
        • $add (aggregation)
        • $addToSet (aggregation)
        • $allElementsTrue (aggregation)
        • $and (aggregation)
        • $anyElementTrue (aggregation)
        • $arrayElemAt (aggregation)
        • $arrayToObject (aggregation)
        • $asin (aggregation)
        • $asinh (aggregation)
        • $atan (aggregation)
        • $atan2 (aggregation)
        • $atanh (aggregation)
        • $avg (aggregation)
        • $ceil (aggregation)
        • $cmp (aggregation)
        • $concat (aggregation)
        • $concatArrays (aggregation)
        • $cond (aggregation)
        • $convert (aggregation)
        • $cos (aggregation)
        • $dateFromParts (aggregation)
        • $dateToParts (aggregation)
        • $dateFromString (aggregation)
        • $literal (aggregation)
      • 查询修饰符
    • 数据库命令
      • 聚合命令
      • 地理空间命令
      • 查询和写操作命令
      • 查询计划缓存命令
      • 认证命令
      • 用户管理命令
      • 角色管理命令
      • 复制命令
      • 分片命令
      • 会话命令
      • 管理命令
      • 诊断命令
      • 免费监控命令
      • 系统事件审计命令
    • mongo Shell 方法
      • 集合方法
        • db.collection.aggregate()
        • db.collection.bulkWrite()
        • db.collection.copyTo()
        • db.collection.count()
        • db.collection.countDocuments()
        • db.collection.estimatedDocumentCount()
        • db.collection.createIndex()
        • db.collection.createIndexes()
        • db.collection.dataSize()
        • db.collection.deleteOne()
        • db.collection.deleteMany()
        • db.collection.distinct()
        • db.collection.drop()
        • db.collection.dropIndex()
        • db.collection.dropIndexes()
        • db.collection.ensureIndex()
        • db.collection.explain()
        • db.collection.find()
        • db.collection.findAndModify()
        • db.collection.findOne()
        • db.collection.findOneAndDelete()
        • db.collection.findOneAndReplace()
        • db.collection.findOneAndUpdate()
        • db.collection.getIndexes()
        • db.collection.getShardDistribution()
        • db.collection.getShardVersion()
        • db.collection.insert()
        • db.collection.insertOne()
        • db.collection.insertMany()
        • db.collection.isCapped()
        • db.collection.latencyStats()
        • db.collection.mapReduce()
        • db.collection.reIndex()
        • db.collection.remove()
        • db.collection.renameCollection()
        • db.collection.replaceOne()
        • db.collection.save()
        • db.collection.stats()
        • db.collection.storageSize()
        • db.collection.totalIndexSize()
        • db.collection.totalSize()
        • db.collection.update()
        • db.collection.updateOne()
        • db.collection.updateMany()
        • db.collection.watch()
        • db.collection.validate()
    • MongoDB中的限制与阈值
    • MongoDB系统集合
    • 词汇表
    • 默认的MongoDB端口
    • 默认的MongoDB读/写关注
    • 服务器会话
  • MongoDB FAQ
    • FAQ: MongoDB基础知识
    • FAQ: MongoDB索引
    • FAQ: MongoDB并发
    • FAQ: MongoDB分片
    • FAQ: MongoDB复制和副本集
    • FAQ: MongoDB存储
    • FAQ: MongoDB诊断
  • MongoDB 版本管理
  • 联系我们
    • Tapdata Cloud
    • MongoDB中文社区
    • 社区合作伙伴—锦木信息
由 GitBook 提供支持
在本页
  • BSON Documents BSON文档
  • 命名限制
  • 命名空间
  • 索引
  • 文档数
  • 副本集
  • 分片集群
  • 分片操作限制
  • 分片键限制
  • 操作
  • 会话
  • 终端
  1. MongoDB参考

MongoDB中的限制与阈值

上一页db.collection.validate()下一页MongoDB系统集合

最后更新于3年前

本文档提供了MongoDB系统的各种硬性和软性限制。

BSON Documents BSON文档

BSON文档大小

BSON的最大文档大小为16MB。

最大文档大小有助于确保单个文档不会使用过多的RAM或在传输过程中占用过多的带宽。要存储大于该限制的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参阅和的文档。

BSON文档的嵌套深度

MongoDB支持不超过100层嵌套深度的。

命名限制

数据库名称的大小写敏感性

由于数据库名称在MongoDB中_不区分大小写_,因此数据库名称不能仅因字符的大小写而不同。

Windows环境下的数据库名称限制

对于在Windows上运行的MongoDB环境,数据库名不能包含以下任意一个字符:

  /\. "$*<>:|?

另外,数据库名不能包含空字符。

Unix/Linux系统中的数据库名称限制

对于在Unix和Linux系统上运行的MongoDB环境,数据库名不能包含以下任意一个字符:

  `/\. "$`

同样的,数据库名不能包含空字符。

数据库名称的长度

数据库名不能为空并且必须小于64个字符。

集合名称的限制

集合名必须以下划线或者字母符号开始,并且_不能_:

  • 包含$;

  • 为空字符串(比如"");

  • 包含空字符;

  • 以system.为前缀(这部分表保留给内部使用);

    命名空间长度:

字段名称的限制

  • 字段名称不能包含空字符。

  • 顶级字段名称不能以美元符号($)字符开头。

    此外,从MongoDB 3.6开始,服务器允许存储包含点(即.)和美元符号(即$)的字段名称。

    重要

    警告

    MongoDB does not support duplicate field names

    MongoDB不支持重复的字段名称

    MongoDB查询语言对于具有重复字段名称的文档是未定义的。BSON构建器可能支持使用重复的字段名称创建BSON文档。尽管BSON构建器可能不会抛出错误,但是_即使_插入操作返回成功,也不支持将这些文档插入MongoDB。例如,通过MongoDB驱动程序插入具有重复字段名称的BSON文档可能会导致驱动程序在插入之前静默删除重复值。

命名空间

命名空间长度

  • 提示

索引

索引键的限制

注意

4.2版本有变更

对于从MongoDB 2.6到将fCV设置为**"4.2"**或更早的MongoDB版本,索引条目的_总大小_必须_小于_1024字节,该总大小可能包括结构体开销,具体取决于BSON类型。

每个集合中的索引个数

单个集合内_不能超过_64个索引。

索引名称长度

注意

4.2版本有变更

在将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。

多键索引

多键索引不能覆盖对数组字段的查询。

地理位置索引

地理位置索引无法覆盖查询。

索引构建中的内存使用情况

4.2版本有更新

  • 提示

字节序和索引类型

  • 提示

    为了在一个包含非简单字节序的集合上创建一个text,2d或geoHaystack索引,您必须在创建索引时显示指定collation: {locale: "simple"}。

隐藏索引

文档数

限制集合中的最大文档数量

如果使用max参数为限制集合指定最大文档数,则该限制必须少于2^32个文档。如果在创建上限集合时未指定最大文档数,则对文档数没有限制。

副本集

副本集成员个数

副本集能拥有不超过50个成员。

副本集中可投票成员个数

自动创建的oplog表的最大大小

分片集群

分片群集具有此处描述的限制和阈值。

分片操作限制

分片环境中无法执行的操作

分片集群中的覆盖索引

对已存在的集合进行分片的数据大小限制

如果现有集合的大小未超过特定限制,则只能对其进行分片。可以基于所有分片键值的平均大小以及配置的块大小来估计这些限制。

重要

这些限制仅适用于初始化分片操作。成功启用分片后,分片集合可以增长到任何大小。

如果如下的公式来计算_理论_最大集合大小。

  maxSplits = 16777216 (bytes) / <average size of shard key values in bytes> maxCollectionSize (MB) = maxSplits * (chunkSize / 2)

注意

BSON文档的最大大小为16MB或者16777216B。

所有的转换都是基于二进制的,比如1024KB = 1MB。

如果maxCollectionSize小于或几乎等于目标集合,则增加块大小以确保成功进行初始分片。如果对计算结果是否过于“接近”目标集合大小有疑问,最好增加块大小。

下表使用上述公式说明了最大的集合规模:

分片键值的平均大小
512字节
256字节
128字节
64字节

拆分的最大次数

32768

65536

131072

262144

最大集合大小(块大小64MB)

1TB

2TB

4TB

8TB

最大集合大小(块大小128MB)

2TB

4TB

8TB

16TB

最大集合大小(块大小256MB)

4TB

8TB

16TB

32TB

  • Single Document Modification Operations in Sharded Collections 分片集合中的单文档修改操作

分片集合中的唯一索引

MongoDB不支持跨分片的唯一索引,除非唯一索引包含完整的分片键作为索引前缀。在这些情况下,MongoDB将在整个索引键上而不是单个字段上进行唯一性约束。

提示

迁移时每个块的最大文档数量

分片键限制

分片键大小

从4.4版本开始,MongoDB去除了关于分片键大小的限制。

在4.2及之前的版本,一个分片键大小不能超过512B。

分片键索引类型

分片键在MongoDB4.2及以前的版本中是不可改变的

注意

4.4版本中更新

在MongoDB 4.2和更早版本中,一旦对集合进行分片,则分片键是不可改变的。也就是说,您不能为该集合选择其他分片键。

如果必须更改分片键(则需要进行以下的重建步骤):

  • 将MongoDB中的所有数据转储为外部格式。

  • 删除原始分片集合。

  • 使用新的分片密钥配置分片。

  • 将转储的数据还原到MongoDB中。

单调递增的分片键会限制插入性能

如果集群上的操作主要是读取操作和更新,则此限制可能不会影响集群。

操作

排序操作

如果MongoDB无法使用一个或多个索引来获取排序顺序,则MongoDB必须对数据执行阻塞式排序操作。该名称指的是SORT阶段在返回任何输出文档之前读取所有输入文档的要求,从而阻止了该特定查询的数据流。

在版本4.4中进行了更改:对于MongoDB 4.2和更低版本,阻塞排序操作不能超过32MB系统内存。

聚合管道操作

流水线级的RAM限制为100MB。如果阶段超出此限制,则MongoDB将产生错误。要允许处理大型数据集,请使用allowDiskUse选项启用聚合管道阶段以将数据写入临时文件。

在版本3.4中进行了更改。

提示

另请参考:

聚合以及读关注

2d地理位置查询无法使用$or操作符

提示

查看: 参考:

地理位置查询

对于地理位置查询,使用dusphere索引的结果。

将2d索引用于球形查询可能会导致错误的结果,例如将2d索引用于环绕两极的球形查询。

地理空间坐标

  • 有效的经度值在-180到180之间(包括两者)。

  • 有效的纬度值在-90到90之间(包括两者)。

GeoJSON多边形的面积

多文档事务

  • 事务中使用的集合可以位于不同的数据库中。

    注意

    您无法在跨分片写入事务中创建新集合。例如,如果您在一个分片中写入现有集合,而在另一个分片中隐式创建一个集合,则MongoDB无法在同一事务中执行这两项操作。

  • 您无法在config,admin或local数据库中读取/写入集合。

  • 您无法写入system.*集合。

  • 您无法返回受支持操作的查询计划(即explain)。

  • 4.4版本中有更新

    以下操作在事务中不被允许:

  • 在跨分片写入事务中创建新集合。例如,如果您在一个分片中写入现有集合,而在另一个分片中隐式创建一个集合,则MongoDB无法在同一事务中执行这两项操作。

批量写大小限制

在3.6版中进行了更改:写入限制从1,000增加到100,000。此限制也适用于旧式OP_INSERT消息。

视图

视图具有以下操作限制:

  • 只读

  • 不能重命名

  • 不支持文本索引

  • 不支持map-reduce操作

投射限制

4.4版的新功能:

$前缀的字段路径限制

  db.inventory.find( {}, { "$instock.warehouse": 0, "$item": 0, "detail.$price": 1 } ) // Invalid starting in 4.4

$位置运算符的放置限制

  db.inventory.find( { }, { "instock.$.qty": 1 } ) // Invalid starting in 4.4

要解决此问题,请删除$投射运算符后面的字段路径部分。在以前的版本中,MongoDB会忽略$后面的路径部分; 即,该投射被视为"instock.$"。

空字段名称投射限制

  db.inventory.find( { }, { "": 0 } ) // Invalid starting in 4.4

在以前的版本中,MongoDB将空字段的包含/排除视为不存在字段的投射。

路径冲突:嵌入式文档及其字段

从MongoDB 4.4开始,使用嵌入文档的任何字段来投射嵌入文档都是非法的,例如,考虑包含文档的集合inventory,其中包含size字段:

  { ..., size: { h: 10, w: 15.25, uom: "cm" }, ... }

从MongoDB 4.4开始,以下操作因路径冲突错误而失败,因为它尝试同时投射size文档和size.uom字段:

  db.inventory.find( {}, { size: 1, "size.uom": 1 } )  // Invalid starting in 4.4

在以前的版本中,嵌入文档及其字段之间的最后一个投射决定了整个投射:

  • 如果嵌入式文档的投射紧随其字段的所有投射之后,则MongoDB会投射嵌入式文档。例如,投射文档{"size.uom":1, size:1}产生与投射文档{size:1}相同的结果。

  • 如果嵌入式文档的投射先于其任何字段的投射,则MongoDB会投射指定的一个或多个字段。例如,投射文档{"size.uom":1, size:1,"size.h":1}产生与投射文档{"size.uom":1, "size.h":1}相同的结果。

路径冲突:数组和嵌入式字段的$slice

  { ..., instock: [ { warehouse: "A", qty: 35 }, { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ], ... }

从MongoDB 4.4开始,以下操作会因路径冲突而失败:

  db.inventory.find( {}, { "instock": { $slice: 1 }, "instock.warehouse": 0 } ) // Invalid starting in 4.4

$位置运算符和$slice限制

  db.inventory.find( { "instock.qty": { $gt: 25 } }, { "instock.$": { $slice: 1 } } ) // Invalid starting in 4.4

会话

会话和$external用户名限制

在版本3.6.3中更改:要与$external身份验证用户(即Kerberos,LDAP,x.509用户)一起使用会话,用户名不能大于10KB。

会话空闲超时

  var session = db.getMongo().startSession()
  var sessionId = session.getSessionId().id

  var cursor = session.getDatabase("examples").getCollection("data").find().noCursorTimeout()
  var refreshTimestamp = new Date() // 记录操作开始的时间

  while (cursor.hasNext()) {

    // 检查距离上一次刷新是否已经过去了5分钟
    if ( (new Date()-refreshTimestamp)/1000 > 300 ) {
      print("refreshing session")
      db.adminCommand({"refreshSessions" : [sessionId]})
      refreshTimestamp = new Date()
    }

    // 正常地处理游标

  }

终端

译者:phoenix

时间: 2021.04.26

版本: 4.4

如果您的集合名称包含特殊字符(例如下划线字符)或以数字开头,则可以使用 shell中的方法或来访问集合。

对于设置为**"4.4"及以上的集群,MongoDB会将对集合/视图名称空间的限制提高到255个字节。对于集合或视图,命名空间包括数据库名称、点号(.)分隔符和集合/视图名称(例如<database>.<collection>**);

对于设置为"4.2"及以下的集群,集合/视图名称空间的最大长度仍然为120个字节。

MongoDB查询语言无法始终对字段名称包含这些字符的文档查询进行有效地表达(请参阅)。 在查询语言添加相关支持之前,建议不要在字段名称中包含.和$,并且不受MongoDB官方驱动程序支持。

对于设置为**"4.4"及以上的环境,MongoDB会将对集合/视图名称空间的限制提高到255个字节。对于集合或视图,命名空间包括数据库名称、点号(.)分隔符和集合/视图名称(例如<database>.<collection>**);

对于设置为**"4.2"**及以下的环境,集合/视图名称空间的最大长度仍然为120个字节。

另请参考:

从4.2版本开始,MongoDB对于将设置成**"4.2"**及以上的环境去除了此。

当存在时:

如果现有文档的索引条目超过,则MongoDB不会在集合上创建索引。

如果索引字段的索引条目超过,则重新索引操作将出错。重新索引操作是命令以及方法的一部分,因为这些操作会删除集合中的_所有_索引,然后按顺序重新创建它们,所以中的错误阻止了这些操作的重建集合的所有剩余索引。

MongoDB不会将任何具有索引字段的文档插入到索引集合中,该文档的索引字段的对应索引条目将超过,而是将返回错误。MongoDB的早期版本将插入此类文档,但不会为其创建索引。

如果更新的值导致索引条目超过,则对索引字段的更新将出错。如果现有文档包含索引条目超过该限制的索引字段,则导致该文档在磁盘上重新定位的_任何_更新都将返回错误。

和将不会插入包含索引字段的文档,该字段的相应索引条目将超过。

在MongoDB 2.6中,如果该索引字段的对应索引条目在初始同步时超出了,副本集的从节点将继续复制带有索引字段的文档,但会在日志中显示警告信息。从节点还允许对包含了对应的索引条目超过了的索引字段的集合进行索引构建和重建操作,但在日志中显示警告信息。使用混合版本副本集(其中次要版本为2.6和主版本为版本2.4),从节点将复制在2.4主版本上插入或更新的文档,但是如果文档包含一个索引字段(其对应的索引条目超过了),则会在日志中显示错误消息。

对于现有分片集合,如果块中包含文档的索引条目超过的索引字段,则块迁移将失败。

从4.2版本开始,MongoDB对于将设置成**"4.2"**及以上的环境去除了此。

您不能将需要特殊的查询与需要不同类型特殊索引的查询运算符组合在一起。例如,您不能将查询与运算符结合使用。

具有索引的字段必须以或数据的形式保存几何数据。如果您尝试在2dsphere索引字段中插入包含非几何数据的文档,或者在索引字段包含非几何数据的集合上构建2dsphere索引,则该操作将失败。

中的唯一索引限制

支持在集合上构建一个或多个索引。使用内存和磁盘上的临时文件的组合来完成索引构建。的内存使用量的默认限制是200MB(对于4.2.3和更高版本)和500MB(对于4.2.2和更早版本),这是使用单个命令构建的所有索引之间共享的。一旦达到内存限制,将使用指定的目录中名为_tmp子目录中的临时磁盘文件来完成构建。

您可以通过设置这一服务器参数来覆盖该内存限制。设置更高的内存限制可能会导致索引构建更快地完成。但是,相对于系统上未使用的RAM设置此限制过高会导致内存耗尽和MongoDB服务停止。

对于设置为**"4.2"**的环境,索引创建的内存限制对所有索引创建生效;

对于设置为**"4.0"**的环境,索引创建的内存限制仅对前台建索引生效;

可以通过诸如之类的用户命令或诸如之类的管理过程来启动索引构建。两者均受设置的限制。

一次仅填充一个集合,并且没有超过内存限制的风险。但是,用户可能会同时在多个数据库中的多个集合上启动索引构建,并且可能消耗的内存量大于中设置的限制。

为了最大程度地减少在副本集和具有副本集分片的分片集群上建立索引的影响,请使用滚动索引生成过程,如所述。

以下索引类型仅支持简单的二进制比较规则而不支持:

索引;

索引;

索引。

你无法_id索引。

在上无法使用

副本集最多可以有7个投票成员。有关成员总数超过7个的副本集,请参阅。

如果您未明确指定oplog表的大小(即使用或),则MongoDB将创建一个不超过50GB的oplog表。[1]

[1]从MongoDB 4.0开始,操作日志可以超过其配置的大小限制,以避免删除。

The command is not supported in sharded environments. 不允许从 函数引用db对象。这在未分片的集合中并不常见。

分片环境不支持命令。

从MongoDB 3.0开始,如果索引不包含分片键,则对于运行在上的查询而言,索引不能集合上的查询,但_id索引除外:如果分片集合上的查询仅指定条件在_id字段上并仅返回_id字段,即使_id字段不是分片键,_id索引也可以覆盖查询。

在以前的版本中,对于运行在上的查询而言,索引无法集合上的查询。

成功完成初始化分片后,您可以根据需要减小块大小。如果以后减小块大小,则所有块可能都需要花费一些时间才能拆分为新的大小。有关修改块大小的说明,请参阅。

指定了justOne或multi:false选项的分片集合的所有和操作必须在查询条件中包括或_id字段。否则将返回错误。

替代方法请参考。

默认情况下,如果块中的文档数大于配置的除以平均文档大小所得结果的1.3倍,则MongoDB无法移动该块。的返回结果包含了avgObjSize字段,该字段表示集合中的平均文档大小。

对于的块,从MongoDB 4.4开始:

新的平衡器设置——tryToBalanceJumboChunks允许平衡器迁移过大而无法移动的块,只要这些块未标记为即可。有关详细信息请参见。

命令可以指定一个新选项,以允许迁移过大而无法移动的块,无论该块有没有被标记为。

索引可以是分片键上的升序索引,也可以是以分片键开头并为分片键指定升序的复合索引,也可以是。

索引不能是在字段上指定的,或。

从MongoDB 4.4开始,您可以通过向现有键添加一个或多个后缀字段来优化集合的分片键。请参阅。

对分片建范围进行以确保初始均匀分配。

对于具有高插入量的集群,具有单调递增和递减性质的分片键可能会影响插入的吞吐量。如果您的分片键是_id字段,请注意_id字段的默认值是通常具有递增值的。

当使用单调递增的分片键进行插入文档操作时,所有的插入都落在单个上的同一。系统最终划分接收所有写操作的块范围,并迁移其内容以更均匀地分配数据。但是,群集在任何时候都只将插入操作定向到单个分片,这会造成插入吞吐量的瓶颈。

为避免此约束,请使用或选择一个不会单调增加或减少的字段。

和存储具有升序值的键的哈希值。

如果MongoDB要求使用100MB以上的系统内存进行阻塞排序操作,则除非查询指定(MongoDB 4.4中的新增功能),否则MongoDB将返回错误。允许MongoDB在处理阻塞排序操作时使用磁盘上的临时文件来存储超过100MB系统内存限制的数据。

有关排序和索引使用的更多信息,请参见。

阶段必须保持在100 MB内存限制内。如果为操作指定了allowDiskUse:true,则阶段将忽略该选项。如果操作中还有其他阶段,则allowDiskUse:true选项对这些其他阶段有效。

从MongoDB 4.2开始,和均包含usedDisk字段,其指示了是有否有聚合阶段由于而将数据写入磁盘上临时文件。

从MongoDB 4.2开始,阶段不能与级别的读关注结合使用。也就是说,如果为指定级别的读关注,则不能在管道中包括阶段。

阶段不能与级别的读关注结合使用。也就是说,如果为指定读取关注点,则不能在管道中包括阶段。

对于或 ,如果您指定面积大于单个半球的单环多边形,则; 否则, 或 将查询互补几何。对于面积大于半球的所有其他GeoJSON多边形, 或 查询互补几何。

对于而言:

您可以在现有集合上指定读/写(CRUD)操作。有关CRUD操作的列表,请参阅。

使用**“4.4”**或更高版本时,可以在事务中创建集合和索引。有关详细信息,请参见。

您无法写集合。(从MongoDB 4.2开始)

对于在事务外部创建的游标,不能在事务内部调用。对于在事务中创建的游标,不能在事务外部调用。从MongoDB 4.2开始,您不能将 指定为中的第一个操作。

影响数据库目录的操作,例如在使用**"4.2"或更低版本时创建/删除集合或索引。使用fcv"4.4"**或更高版本时,您可以在事务中创建集合和索引,除非该事务是跨分片写入事务。有关详细信息,请参考。

当使用除以外的其他读关注级别时,如 方法;以及显示创建索引,如 和 方法。

和 命令及其辅助方法。

其他非CRUD和非信息性操作,例如, , 等及其辅助方法。

事务存在一个生命周期限制,由指定,默认值为60s。

在单个批处理操作中允许100,000次,这由对服务器的单个请求定义。

shell中的 操作和驱动程序中的类似方法没有此限制。

视图定义管道不能包含 或者 阶段。如果视图定义包括嵌套管道(例如,视图定义包括 或者 阶段),则此限制也适用于嵌套管道。

不支持以下操作符:、、、

不支持geoNear操作(即管道阶段)

从MongoDB 4.4开始, 和 无法投射以$开头的字段,但除外。例如,从MongoDB 4.4开始,以下操作无效:

MongoDB已经有一个,即顶级字段名称不能以美元符号($)开头。在早期版本中,MongoDB忽略$前缀的字段投射。

从MongoDB 4.4开始,投射运算符只能出现在字段路径的末尾。例如"field.$"或"fieldA.fieldB.$"。例如,从MongoDB 4.4开始,以下操作无效:

从MongoDB 4.4开始,和不能包含空字段名称的投射。例如,从MongoDB 4.4开始,以下操作无效:

从MongoDB 4.4开始,和投射不能同时包含数组的和数组中嵌入的字段,例如,考虑包含数组字段instock的集合inventory:

在以前的版本中,投射会同时应用这两个投射并返回instock数组中的第一个元素($slice: 1),但会抑制投射元素中的warehouse字段。从MongoDB 4.4开始,要获得相同的结果,请使用带两个独立阶段的方法。

从MongoDB 4.4开始,和 投射不能包含$slice投射表达式作为$投射表达式的一部分。例如,从MongoDB 4.4开始,以下操作无效:

MongoDB已经有一个,即顶级字段名称不能以美元符号($)开头。在以前的版本中,MongoDB返回instock数组中与查询条件匹配的第一个元素(instock.$); 即位置投射"instock.$"优先,而$slice:1是空操作。"instock.$":{$slice:1}不排除任何其他文档字段。

在30分钟内未执行任何读或写操作或未使用 刷新的会话在此阈值之内被标记为已过期,并且MongoDB服务器可以随时将其关闭。关闭会话将终止所有正在进行的操作以及与该会话关联的已打开游标。这包括使用 或 大于30分钟配置的游标。

考虑一个发出命令的应用程序。服务器返回一个游标以及由的 定义的一批文档。每次应用程序从服务器请求新一批文档时,会话都会刷新。但是,如果应用程序花费超过30分钟的时间来处理当前批次的文档,则该会话将被标记为已过期并关闭。当应用程序请求下一批文档时,服务器将返回错误,因为在关闭会话时游标已被杀死。 对于返回游标的操作,如果游标可能闲置30分钟以上,请使用 在显式会话中发出该操作,并使用 命令定期刷新该会话。例如:

在示例操作中,方法与显式会话相关联。游标使用配置,以防止服务器在空闲时关闭游标。while循环包含一个代码块,使用每5分钟刷新一次会话。由于会话将永远不会超过30分钟的空闲超时,因此游标可以无限期保持打开状态。

对于MongoDB驱动程序,请参考中有关创建会话的说明和语法。

终端提示符每行的限制为4095个代码点。如果您输入的行中包含4095个以上的代码点,则将被截断。

原文:

mongofiles
驱动程序
BSON文档
mongo
db.getCollection()
驱动程序的类似方法
fCV
fCV
SERVER-30575
fCV
fCV
命名限制
fCV
索引键限制
索引键限制
索引键限制
索引键限制
compact
db.collection.reIndex()
索引键限制
索引键限制
索引键限制
mongorestore
mongoimport
索引键限制
索引键限制
索引键限制
索引键限制
索引键限制
fCV
索引名称长度限制
文本索引
$text
$text
$near
2dsphere
坐标对
GeoJSON
分片操作限制
createIndexes
createIndexes
createIndexes
createIndexes
createIndexes
--dbpath
maxIndexBuildMemoryUsageMegabytes
fCV
fCV
创建索引
初始化同步
maxIndexBuildMemoryUsageMegabytes
初始化同步操作
maxIndexBuildMemoryUsageMegabytes
在副本集上滚动索引构建
字节序
文本
2d
geoHaystack
隐藏
隐藏索引
hint()
非投票成员
oplogSizeMB
--oplogSize
大多数提交点
geoSearch
$where
$where
geoSearch
mongos
覆盖
分片
mongos
覆盖
分片
修改分片群集中的块大小
update()
remove()
分片键
任意字段的唯一性约束
块大小
db.collection.stats()
太大而无法迁移
巨型(Jubmo)
均衡超出大小限制的块
moveChunk
forceJumbo
巨型(Jubmo)
分片键
哈希索引
分片键
分片键
多键索引
文本索引
地理空间索引
fineCollectionShardKey
预分片
ObjectId
分片
块
哈希分片键
哈希分片键
哈希索引
cursor.allowDiskUse()
allowDiskUse
排序和索引使用
$graphLookup
aggregate()
$graphLookup
aggregate()
事件探查器日志消息
诊断日志消息
内存限制
$sort与内存限制
$group操作符与内存
$out
"linearizable"
db.collection.aggregate()
"linearizable"
$out
$merge
"linearizable"
db.collection.aggregate()
"linearizable"
$merge
$or
2d Index Internals
$geoIntersects
$geoWithin
在$ geometry表达式中包括自定义MongoDB坐标参考系统
$geoIntersects
$geoWithin
$geoIntersects
$geoWithin
多文档事务
CRUD操作
fcv
在事务中创建集合和索引
限制(capped)
getMore
getMore
killCursors
事务
fcv
在事务中创建集合和索引
"local"
显示创建集合
db.createCollection()
db.collection.createIndexes()
db.collection.createIndex()
listCollections
listIndexes
createUser
getParameter
count
transactionLifetimeLimitSeconds
写入
mongo
Bulk()
$out
$merge
$lookup
$facet
投射
$
$elemMatch
$slice
$meta
$geoNear
find()
findAndModify()
DBRef字段
限制
$
find()
findAndModify()
find()
findAndModify()
$slice
$project
db.collection.aggregate()
find()
findAndModify()
限制
refreshSessions
noCursorTimeout()
maxTimeMS()
db.collection.find()
find()
cursor.batchSize()
Mongo.startSession()
refreshSessions
db.collection.find()
noCursorTimeout()
refreshSessions
驱动程序文档
mongo
https://docs.mongodb.com/manual/reference/limits/