首页/数据/NoSQL 速查/createCollection 与集合选项
MongoDB99 条

createCollection 与集合选项

显式创建集合可以带上 capped 固定集合、validator 校验器、collation 排序规则等选项;隐式创建只能用默认选项。

NoSQL 速查数据更新于 2026-10-13

显式建集合的意义

不建集合也能写入:第一次插入时数据库会自动创建,但只能使用默认选项。显式调用 createCollection 才能带上固定集合、校验器、排序规则、时序集合等参数,而这些选项一旦定下,事后修改往往受限(校验器可通过 collMod 调整)。因此对结构有要求的集合,建议在建库脚本里显式创建而不是让写入顺带创建。

基本信息

语法db.createCollection(name, options)
常用选项capped + size + max、validator、validationLevel、collation、timeseries、expireAfterSeconds
查看db.getCollectionNames() 与 db.getCollectionInfos()
自动创建写入不存在的集合时按默认选项创建,无法携带自定义参数
适用版本各选项的可用版本不同,时序集合需 5.0 及以上
权限要求需要对应库的 createCollection 权限

典型使用场景

  • 环形日志缓冲:固定集合保留最近一段数据,写满自动淘汰旧文档
  • 结构约束:用校验器限制必填字段与取值范围,挡住脏数据
  • 多语言排序:指定 collation 让字符串比较符合业务语言习惯
  • 时序数据落地:用时序集合存储指标,配合过期时间自动清理
  • 环境初始化脚本:把集合与索引显式声明,避免各环境结构不一致

创建示例

创建示例
// 固定集合:写入顺序固定,超过 size 后自动淘汰最旧文档
db.createCollection("logs", { capped: true, size: 104857600, max: 100000 })

// 带校验器的集合:约束字段类型与取值范围
db.createCollection("orders", {
  validator: { $jsonSchema: {
    bsonType: "object", required: ["sku", "qty"],
    properties: { sku: { bsonType: "string" }, qty: { bsonType: "int", minimum: 1 } }
  } },
  validationLevel: "strict", validationAction: "error"
})

// 时序集合:按时间字段与元数据字段组织,过期自动清理
db.createCollection("metrics", {
  timeseries: { timeField: "ts", metaField: "meta", granularity: "hours" },
  expireAfterSeconds: 86400 * 30
})

db.getCollectionNames()

选项读法

选项作用注意点
capped + size固定集合与容量上限(字节)写满后自动淘汰旧文档,不能删除单条
max固定集合的最大文档数与 size 先到者生效
validator写入校验规则(如 $jsonSchema)只对启用后的写入生效
validationLevel / action校验严格程度与处理方式moderate 放宽历史文档,warn 只记录不拒绝
collation字符串比较与排序规则影响索引使用与查询匹配
timeseries时序集合的时间与元数据字段需 5.0 及以上,写读方式与普通集合有差异
固定集合适合环形缓冲:写入顺序稳定、到量自动淘汰,但不能删除单条文档,也不能让更新改变文档大小。新项目做大体积日志缓冲时,也可以评估时序集合。
校验器只约束之后的写入:历史不合规数据不会被自动清理,启用前要评估存量数据对更新操作的影响。

易错点

  • capped 的 size 单位是字节却按文档数理解:容量瞬间写满并开始淘汰仍在使用的数据
  • 给固定集合设计删除或变长更新逻辑:这两类操作在固定集合上不受支持,需要改用普通集合
  • 以为加了校验器历史数据就会自动变合规:存量数据照旧保留,读取端仍要兼容处理
  • time series 集合按普通集合的方式做更新与删除:时序集合在写读模式与可更新范围上有限制,需先核对版本文档

数据来源与参考

  • MongoDB Manual: db.createCollection()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌