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 Atlas | Collections → 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()自动 ORcreateCollection()显式”
快速操作模板
// 推荐:插入即创建
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 云端集合管理,欢迎继续提问!