当前位置:首页 > 问答 > 正文

树叶云带你简单聊聊MongoDB里怎么插入那些文档,手把手教不会太难

(来源:MongoDB官方文档核心概念)

先唠两句嗑:MongoDB是个啥?文档又是个啥?

你可以先把MongoDB想象成一个超级灵活的大仓库,它不是那种规规矩矩、必须按固定格子放东西的传统仓库(比如Excel表格),这个仓库里没有“行”和“列”的死板概念,取而代之的是一堆叫做“集合”的大筐。

那“文档”呢?就是你要放进这些大筐里的东西,它长得特别像我们平时写的“购物清单”或者“个人简历”,比如一份简历:

{
  "姓名": "张三",
  "年龄": 28,
  "职业": "程序员",
  "技能": ["Java", "Python", "JavaScript"],
  "联系方式": {
    "电话": "13800138000",
    "邮箱": "zhangsan@email.com"
  }
}

看到了吗?(来源:MongoDB数据模型介绍)这就是一个典型的文档,它用的是JSON那种键值对的样子,非常直观,它可比表格灵活多了:年龄是数字,技能是个数组,联系方式里面还能再套一个小对象,今天我们要学的,就是怎么把这样一份份“简历”塞进MongoDB的“大筐”(集合)里。

动手之前:你得先有个仓库和筐

在你开始往里面扔东西之前,总得先把仓库和筐准备好吧?在MongoDB里,这一步简单得出奇。

  1. 连接数据库:你得用代码(比如用Node.js的MongoDB驱动)或者命令行工具(mongosh)连接到你的MongoDB服务器,这就好比用钥匙打开了仓库的大门。
  2. 选择数据库:仓库里可能有好几个房间(数据库),你得先决定用哪个,如果这个房间不存在?没关系,MongoDB特别贴心,你直接用use 数据库名命令,它就会自动帮你创建一个。use myFirstDatabase
  3. 选择集合:进入房间后,你要选定一个“大筐”(集合),和数据库一样,如果集合不存在,你直接往里面插文档,MongoDB也会自动创建它,比如你选定一个叫 users 的集合来存放用户信息。

看,准备工作就这么简单,根本不用你事先画好图纸、建好表结构。

树叶云带你简单聊聊MongoDB里怎么插入那些文档,手把手教不会太难

核心操作:开插!几种插入文档的方法

现在筐准备好了,我们来往里放文档,主要有两种方式,一种是一次放一个,另一种是一次放一堆。

一次一个,稳扎稳打——insertOne()

(来源:MongoDB CRUD操作 - 插入文档)

当你只有一个文档要插入时,用这个方法最直接,它的语法长这样(我们以JavaScript代码为例,但意思很通用):

db.collection('users').insertOne({
  "姓名": "李四",
  "爱好": "读书"
})

这条命令的意思就是:在 users 这个集合里,插入一个文档,文档内容是花括号 里的那些东西。

树叶云带你简单聊聊MongoDB里怎么插入那些文档,手把手教不会太难

有个特别重要的小惊喜:当你执行完插入操作后,MongoDB会自动为这个文档生成一个全世界唯一的身份证号,叫做 _id。(来源:MongoDB文档主键 _id)如果你自己不指定,系统就会送你一个,实际上插入后,你刚才的那个文档在数据库里就变成了:

{
  "_id": ObjectId("5f7b8c9d6e5f4a3b2c1d0e0f"), // 这是系统自动生成的,是一长串复杂的字符
  "姓名": "李四",
  "爱好": "读书"
}

这个 _id 是每个文档的唯一标识,非常重要,你也可以在插入时自己指定一个 _id,比如用学号、工号什么的,但一定要保证唯一哦。

批量插入,效率高高——insertMany()

(来源:MongoDB CRUD操作 - 插入文档)

如果你有好几个文档要一起放进仓库,比如要一次性录入一个班的学生信息,一个一个插就太慢了,这时候就该 insertMany() 出场了。

用法也差不多,只不过是把多个文档放在一个方括号 [] 里,用逗号隔开,像这样:

树叶云带你简单聊聊MongoDB里怎么插入那些文档,手把手教不会太难

db.collection('students').insertMany([
  {
    "姓名": "王五",
    "成绩": 90
  },
  {
    "姓名": "赵六",
    "成绩": 85
  },
  {
    "姓名": "钱七",
    "成绩": 92
  }
])

执行这条命令,MongoDB会一下子把这三个学生文档都插入到 students 集合中,同样,每个文档也会自动获得自己唯一的 _id,这种方法效率高,特别适合初始化数据或者导入大量数据。

插完了,然后呢?看看插得对不对

光说插进去了,我们得确认一下成果对不对吧?这里有个最简单的检查方法:查找

你可以用 find() 命令来看看集合里现在都有啥。

  • 想看 users 集合里所有东西:db.collection('users').find()
  • 这个方法会把集合里所有的文档都给你列出来,你就可以检查一下刚才插入的“李四”在不在里面了。

find() 命令功能非常强大,后面还可以加各种条件,比如只找成绩大于90分的学生,但那是我们下次再聊的话题了,你只需要用它来做个简单的验证。

划个重点

好了,咱们来回顾一下今天聊的:

  1. 心态放平:MongoDB插入文档不复杂,就是把像JSON一样的数据存进去。
  2. 准备工作:选好数据库和集合,不存在会自动创建,非常省心。
  3. 两种插法
    • insertOne(文档):插入单个文档。
    • insertMany([文档1, 文档2, ...]):批量插入多个文档。
  4. _id:每个文档都有唯一ID,系统会自动生成,你也可以自己指定。
  5. 验证结果:用 find() 命令查看插入是否成功。

你看,是不是没有想象中那么难?就像往一个个灵活的筐里放不同形状的物件一样,非常自由,今天咱们先聊到这儿,你已经成功迈出了MongoDB操作的第一步!下次有机会,我们可以再聊聊怎么从筐里把文档找出来、修改或者删除它们。