MongoDB 创建集合

MongoDB 创建集合完整指南

(MongoDB 8.0+,2025 年最新实践)

核心结论
MongoDB 没有 CREATE TABLE 命令
集合通过 insert 自动创建db.createCollection() 显式创建。


一、MongoDB 集合创建机制

行为结果
db.collection.insertOne(...)自动创建集合(推荐)
db.createCollection("name")显式创建空集合
show collections列出当前数据库所有集合
// 方式 1:自动创建(推荐)
use company
db.employees.insertOne({ name: "张三", age: 30 })
// → 自动创建 employees 集合

// 方式 2:显式创建
db.createCollection("departments")

二、创建集合的 3 种方式

方式 1:insertOne / insertMany(推荐)

use ecommerce

// 插入单文档 → 自动创建集合
db.products.insertOne({
  name: "iPhone 16",
  price: 7999,
  stock: 100,
  tags: ["手机", "苹果"],
  specs: { ram: "8GB", storage: "256GB" }
})

// 插入多文档
db.products.insertMany([
  { name: "MacBook", price: 12999, category: "电脑" },
  { name: "AirPods", price: 1299, category: "配件" }
])

优点:最简单、开发友好、无需提前规划
适用:99% 场景


方式 2:db.createCollection()(显式创建)

use logs
db.createCollection("access_logs")

适用

  • 预创建集合(GUI 工具显示)
  • 创建特殊类型集合(如 Capped、Time Series)

方式 3:带选项创建集合(高级)

use iot
db.createCollection("sensor_data", {
  capped: false,                    // 是否固定大小
  size: 1048576,                    // 最大字节(仅 capped 有效)
  max: 10000,                       // 最大文档数(仅 capped 有效)
  validator: {                      // 文档验证(Schema Validation)
    $jsonSchema: {
      bsonType: "object",
      required: ["timestamp", "device_id", "value"],
      properties: {
        timestamp: { bsonType: "date" },
        device_id: { bsonType: "string" },
        value: { bsonType: "double" }
      }
    }
  },
  validationLevel: "strict",        // 严格模式
  validationAction: "error"         // 违反规则时拒绝
})

三、特殊类型集合创建

1. Capped Collection(固定集合,FIFO)

use cache
db.createCollection("sessions", {
  capped: true,
  size: 1048576,    // 1MB
  max: 5000         // 最多 5000 条文档
})

// 插入数据(超出自动覆盖最旧)
db.sessions.insertOne({ user: "alice", login: new Date() })

用途:日志、会话、实时缓存


2. Time Series Collection(时序集合)

use monitoring
db.createCollection("cpu_usage", {
  timeseries: {
    timeField: "timestamp",     // 时间字段(必须)
    metaField: "host",          // 元数据字段(可选)
    granularity: "minutes"      // 粒度:seconds, minutes, hours
  }
})

// 插入时序数据
db.cpu_usage.insertOne({
  timestamp: new Date(),
  host: "web01",
  cpu: 45.2,
  memory: 68.7
})

优势:自动分区、压缩、高性能写入


3. Clustered Collection(集群集合,7.0+)

db.createCollection("events", {
  clusteredIndex: {
    key: { _id: 1 },
    unique: true
  }
})

四、集合命名规范

规则示例
不能为空"" 无效
不能含 \0禁止
不能以 system. 开头系统保留
建议小写 + 下划线user_profiles, order_items
避免 $ 开头除非特殊用途
// 合法
db.createCollection("user_logs")
db.createCollection("v2.metrics")

// 非法
db.createCollection("system.users")     // 保留
db.createCollection("")                 // 空

五、验证集合创建成功

// 1. 查看当前数据库
db

// 2. 列出所有集合
show collections

// 3. 查看集合信息
db.products.stats()

// 4. 查看文档数量
db.products.countDocuments({})

// 5. 查看前几条数据
db.products.find().limit(3).pretty()

六、GUI 工具创建集合

工具操作步骤
MongoDB Compass数据库 → Create Collection → 填写名称 → Create
VS Code + MongoDB数据库 → 右键 → Add Collection
MongoDB AtlasCollections → Create Collection

七、常见误区与澄清

误区正确做法
CREATE COLLECTION products;不存在此命令
db.createTable("users")错!是 createCollection
必须先创建集合再插入错!insertOne 自动创建
集合有固定列错!动态 Schema

八、删除集合(慎用)

// 删除单个集合
db.products.drop()

// 删除所有集合(危险!)
db.getCollectionNames().forEach(name => db[name].drop())

九、完整创建脚本示例

// create_collections.js
use myapp

// 1. 用户表(自动创建)
db.users.insertOne({
  name: "管理员",
  email: "admin@myapp.com",
  role: "superadmin",
  createdAt: new Date()
})

// 2. 文章表(显式创建 + 验证)
db.createCollection("articles", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["title", "author", "content"],
      properties: {
        title: { bsonType: "string", maxLength: 200 },
        author: { bsonType: "string" },
        content: { bsonType: "string" },
        status: { enum: ["draft", "published"] }
      }
    }
  }
})

// 3. 日志表(Capped)
db.createCollection("audit_logs", {
  capped: true,
  size: 10 * 1024 * 1024,  // 10MB
  max: 10000
})

print("所有集合创建完成!")
show collections

运行:

mongosh create_collections.js

十、一句话总结

“MongoDB 创建集合 = insertOne() 自动 OR createCollection() 显式”


快速操作模板

// 推荐:插入即创建
use shop
db.orders.insertOne({ total: 999, status: "paid" })

// 高级:带验证的集合
db.createCollection("users", {
  validator: { $jsonSchema: { required: ["email"] } }
})

官方文档

  • https://www.mongodb.com/docs/manual/reference/method/db.createCollection/
  • https://www.mongodb.com/docs/manual/core/timeseries-collections/

如需 Schema 验证最佳实践自动创建集合脚本从 MySQL 表结构迁移Atlas 云端集合管理,欢迎继续提问!

文章已创建 2349

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部