MongoDB 创建集合(完整教程)

什么是 MongoDB 集合?为什么它如此重要?

在开始学习 MongoDB 创建集合之前,先让我们搞清楚一个核心概念:什么是集合(Collection)?

你可以把 MongoDB 的数据库想象成一个巨大的图书馆。这个图书馆里有很多书架,每个书架就是一个数据库。而书架上的每一排书,就是我们今天要讲的“集合”。集合就像是存放特定类型数据的容器,比如用户信息、订单记录、文章内容等等。

与传统的关系型数据库(如 MySQL)中的“表”类似,但 MongoDB 的集合更加灵活。它不要求你提前定义好字段结构,也就是说,你可以在同一个集合里存放格式完全不同的文档。这种灵活性正是 NoSQL 数据库的优势所在。

举个例子:你有一个电商应用,用户可能在不同时间提交不同类型的数据。今天存用户资料,明天存商品评论,后天存订单详情。这些都可以放在同一个“用户资料”集合里,不需要提前声明字段类型和数量。

所以,学会 MongoDB 创建集合,就是掌握如何为你的数据找到合适的“书架位置”。这一步看似简单,却是整个数据存储体系的起点。


MongoDB 创建集合的两种方式

在 MongoDB 中,创建集合主要有两种方式:显式创建隐式创建。它们的区别在于是否主动调用命令来创建。

显式创建集合

使用 createCollection() 命令可以显式地创建一个集合。这种方式适合你希望对集合进行一些预配置的情况。

// 显式创建一个名为 users 的集合
db.createCollection("users")

这条命令执行后,MongoDB 会在当前数据库中创建一个名为 users 的集合。注意,这个集合是空的,还没有任何数据。

小贴士:如果你尝试创建一个已存在的集合,MongoDB 会返回错误。所以建议先检查是否存在再创建,或者使用 createCollection()autoIndexId 参数来避免冲突。

隐式创建集合

更常见的是“隐式创建”——当你第一次向某个集合插入数据时,MongoDB 会自动帮你创建这个集合。

// 向不存在的集合插入一条文档,MongoDB 会自动创建该集合
db.users.insertOne({
  name: "张三",
  age: 28,
  email: "zhangsan@example.com"
})

执行上面这行代码后,即使 users 集合之前不存在,MongoDB 也会自动创建它,并把这条用户数据存进去。

这就像你去图书馆借书,发现某本书的书架上没有标签。你随手把书放上去,管理员就帮你把那个书架“注册”了,以后别人也能找到。

隐式创建虽然方便,但在生产环境中,建议优先使用显式创建,因为你可以提前设置集合的参数,比如是否启用文档大小限制、是否启用 TTL(过期自动删除)等。


设置集合的高级选项

显式创建集合时,你可以传入一些选项,让集合更符合你的业务需求。这些选项相当于给集合“穿上定制的衣服”。

常见的创建选项

选项名 说明 示例
capped 是否启用固定大小集合,超过容量后会覆盖最旧的数据 { capped: true, size: 10485760 }
size 指定集合的最大大小(单位:字节),仅当 capped 为 true 时有效 { size: 10485760 }
max 设置集合中最多允许存储的文档数量 { max: 1000 }
validator 定义文档验证规则,确保插入的数据符合规范 { validator: { $jsonSchema: { ... } } }
indexOptionDefaults 设置索引的默认参数 { indexOptionDefaults: { storageEngine: { wiredTiger: {} } } }

实际案例:创建一个带验证规则的用户集合

假设你希望所有用户必须有 nameemail 字段,并且 age 必须大于 18。

// 显式创建用户集合,设置验证规则
db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name", "email", "age"],
      properties: {
        name: {
          bsonType: "string",
          description: "用户姓名,必须存在"
        },
        email: {
          bsonType: "string",
          pattern: "^.+@.+\..+$",
          description: "邮箱格式必须合法"
        },
        age: {
          bsonType: "int",
          minimum: 18,
          description: "用户年龄必须大于等于 18"
        }
      }
    }
  }
})

这段代码的作用是:创建一个 users 集合,并且只允许插入符合 JSON Schema 规则的数据。如果有人试图插入没有 name 字段或 age 小于 18 的文档,MongoDB 会直接拒绝。

这个功能非常实用,相当于给你的数据加了一道“安检门”,防止脏数据进入系统。


创建数组与初始化

在 MongoDB 中,集合本身是空的,但你可以通过插入文档来“初始化”它。文档(Document)是 MongoDB 的基本数据单元,类似于 JSON 对象。

插入单条数据

// 插入一个用户文档
db.users.insertOne({
  name: "李四",
  age: 30,
  email: "lisi@example.com",
  hobbies: ["读书", "游泳", "编程"]
})
  • insertOne():插入一条文档
  • hobbies 是一个数组类型字段,MongoDB 支持存储数组,非常灵活

批量插入多条数据

// 批量插入多个用户
db.users.insertMany([
  {
    name: "王五",
    age: 25,
    email: "wangwu@example.com",
    hobbies: ["摄影", "旅行"]
  },
  {
    name: "赵六",
    age: 35,
    email: "zhaoliu@example.com",
    hobbies: ["音乐", "绘画"]
  }
])

insertMany() 可以一次性插入多个文档,效率远高于逐条插入。适合初始化数据或导入历史数据。

想象一下,你要把 1000 个用户资料导入系统,如果一条条插入,那得写 1000 行代码。而用 insertMany,只需要一个数组,几秒钟搞定。


集合命名规范与最佳实践

虽然 MongoDB 对集合命名的限制不多,但良好的命名习惯能让你的数据库更清晰、更易维护。

命名规则

  • 只能包含字母、数字和下划线 _
  • 不能以 $. 开头
  • 不能包含空格或特殊字符(如 @#
  • 推荐使用小写字母 + 下划线命名法,如 user_profiles 而不是 UserProfiles

实际建议

建议 说明
使用复数形式 usersorders,表示集合包含多个实体
避免使用保留字 systemadmin 等,可能引发冲突
保持一致性 所有集合命名风格统一,便于团队协作
不要随意删除集合 删除后数据不可恢复,务必谨慎

就像你给文件夹命名一样,用户资料user_data_2024 更直观,也更容易记忆。


查看与管理集合

创建集合只是第一步,后续还需要查看、修改和管理它。

查看当前数据库中所有集合

// 查看当前数据库中所有集合
show collections

输出示例:

users
products
orders

这相当于打开你的“书架目录”,看看有哪些“书架”已经建好了。

查看集合的元信息

// 查看集合的详细信息
db.users.stats()

这个命令会返回集合的大小、文档数量、索引信息等,帮助你评估集合的使用情况。

删除集合

// 删除一个集合
db.users.drop()

执行后,users 集合及其所有数据将被彻底清除。操作不可逆,请务必确认目标集合。

重要提醒:删除集合前,建议先备份数据,或在测试环境中验证命令。


总结:MongoDB 创建集合的核心要点

通过本文,我们系统地学习了 MongoDB 创建集合的全过程。从基本概念到实际操作,再到高级配置,每一步都至关重要。

  • 显式创建适合需要预配置的场景,如设置验证规则、固定大小等;
  • 隐式创建方便快捷,适合开发阶段快速测试;
  • 合理使用 validator 可以有效防止脏数据;
  • 批量插入 insertMany 提升数据导入效率;
  • 命名规范和管理习惯决定数据库的长期可维护性。

掌握 MongoDB 创建集合,就是掌握了数据存储的第一步。它不仅是技术动作,更是数据架构设计的起点。无论你是做个人项目,还是参与企业级开发,这一技能都不可或缺。

记住:好的数据结构,从一个正确的集合开始。