MongoDB 使用 insert() 插入对象数组的示例

⚡ 智能摘要

MongoDB 使用 insert() 函数向对象数组中添加多个文档的方法,演示了如何一次性将多个文档添加到集合中。它存储了一个员工记录数组,将数组嵌入到文档中,并使用 JSON 的 print 函数清晰地显示结果。

  • 📥 散装插页: insert() 方法通过一次高效的操作将一系列文档添加到集合中。
  • 🧾 文档模型: 每个文档都是一组字段-值对,并且 MongoDB 自动添加唯一的_id。
  • 🗂️ 嵌入式数组: 数组也可以作为字段存在于同一个文档中,保持ping 相关值放在一起。
  • 🔁 现代方法: insertOne() 和 insertMany() 是当前更清晰地替代旧版 insert() 方法的方案。
  • 🖨️ Readable 输出: forEach(printjson) 命令以清晰易读的 JSON 格式打印每个文档。

什么是 insert() 方法? MongoDB?

insert() 方法 MongoDB 向集合中添加一个或多个文档。文档是一组字段-值对,以 BSON(JSON 的二进制格式)存储。当您传递单个文档时,`insert()` 函数会存储该记录;当您传递文档数组时,它会在一次操作中存储所有文档,这比逐个插入要快得多。

该方法针对特定集合运行,使用模式 db.collection.insert()。如果目标集合尚不存在, MongoDB 首次插入数据时会自动创建该字段。如果您未提供 _id 字段,则每个文档还会获得一个唯一的 _id 字段,以便日后识别每个记录。

虽然 insert() 仍然有效,但较新的版本 MongoDB 版本提供了 `insertOne()` 和 `insertMany()` 这两个更清晰的替代函数。以下示例使用 `insert()` 添加一个员工文档数组,然后以易读的 JSON 格式显示结果。

添加文档数组

“insert”命令还可用于一次性将多个文档插入到集合中。以下代码示例可用于一次性插入多个文档。

下面的例子展示了如何做到这一点,

步骤1) 创建一个 JavaScript 名为 myEmployee 的变量用于保存文档数组

步骤2) 将所需文档及其字段名称和值添加到变量中

步骤3) 使用插入命令将文档数组插入到集合中

var myEmployee=
	[
		{
			"Employeeid" : 1,
			"EmployeeName" : "Smith"
		},
		{
			"Employeeid"   : 2,
			"EmployeeName" : "Mohan"
		},
		{
			"Employeeid"   : 3,
			"EmployeeName" : "Joe"
		},
	];

	db.Employee.insert(myEmployee);

如果命令执行成功,将显示以下输出

MongoDB 使用 insert() 的对象数组

输出显示这 3 个文档已添加到集合中。

如何在文档中插入数组

除了插入一系列单独的文档之外, MongoDB 允许您将数组作为字段存储在单个文档中。当一条记录自然包含一系列值时,例如拥有多种技能的员工或选修多门课程的学生,此功能非常有用。因为 MongoDB 它采用灵活的文档模型,数组直接存在于对象内部,而不是存在于单独的表中,这样可以将相关数据放在一起。

以下示例插入一个员工文档,其中包含一个名为 Skills 的数组字段:

db.Employee.insert(
   {
      "Employeeid" : 4,
      "EmployeeName" : "Alan",
      "Skills" : [ "MongoDB", "Node.js", "Express" ]
   }
);

本文档各部分的功能如下:

  • 员工编号员工姓名 是普通的字段和值对。
  • 技能 是一个数组字段,其中包含方括号内的三个字符串值。
  • 整个文档(包括嵌入的数组)通过一次插入操作即可存储。

添加记录后,您可以使用查找查询来确认嵌入的数组,该查询会将结果以 JSON 格式打印出来:

db.Employee.find( { "Employeeid" : 4 } ).forEach(printjson)

输出结果显示了嵌套在员工文档中的技能数组。 Later您可以使用 `$push` 操作符向数组中添加新值,或者通过索引位置读取单个元素。以这种方式存储关联值,可以确保每个文档都是独立的,减少跨集合的连接操作,并使数据更易于阅读和维护。

insert() 与 insertOne() 与 insertMany()

MongoDB 提供了三种相关的数据添加方法。下表对它们进行了比较,以便您选择合适的方法:

付款方式 目的 例如:
插() 此旧方法用于添加单个文档或文档数组。它仍然有效,但在较新的驱动程序中已被弃用。 db.Employee.insert(myEmployee)
insertOne() 添加一个文档并返回其插入的 _id。推荐用于添加单个记录。 db.Employee.insertOne({ … })
insertMany() 一次调用即可添加一组文档,并返回所有插入的 _id。推荐用于批量插入。 db.Employee.insertMany([ { … }, { … } ])

对于新项目,请使用 `insertOne()` 和 `insertMany()` 方法,因为它们能更清晰地表达意图并提供更好的错误报告。`insert()` 方法主要保留用于向后兼容旧版教程和脚本。

以 JSON 格式打印

JSON 是一种称为 Java脚本对象符号,这只是一种以有组织、易读的方式存储信息的方法。在我们的后续示例中,我们将使用 JSON 打印功能以更好的格式查看输出。

我们来看一个 JSON 格式打印的例子

db.Employee.find().forEach(printjson)

Code 说明:

  1. 第一个改动是将名为 `forEach()` 的函数添加到 `find()` 函数中。这样做是为了确保显式地遍历集合中的每个文档。这样,你就可以更好地控制对集合中每个文档的操作。
  2. 第二个变化是将 printjson 命令放入 forEach 语句中。这将导致集合中的每个文档都以 JSON 格式显示。

如果命令执行成功,将显示以下输出

输出:

以 JSON 格式打印

输出清楚地显示所有文档都以 JSON 样式打印。

常见问题

是的。将文档数组传递给 `insert()` 函数会一次性插入所有文档。这种批量插入方式比为每个文档单独调用 `insert()` 函数更快,不过现在推荐使用 `insertMany()` 函数。

是的。如果文档不包含 _id 字段, MongoDB 在插入过程中会自动为其生成唯一的 ObjectId,以便以后可以识别和检索每个存储的记录。

默认情况下, MongoDB 执行有序插入操作。它会按照给定的顺序添加文档,并在遇到第一个错误时停止,其余文档将不插入。将 ordered 设置为 false 则会忽略错误继续插入。

是的。AI 工具可以将数据的纯文本描述转换为 insertOne() 或 insertMany() 语句,包括嵌入式数组。在数据库上运行这些语句之前,务必检查生成的字段和数据类型。

AI可以根据查询模式,建议是将数组嵌入文档中还是引用单独的集合。这有助于初学者高效地建模数据,同时避免不必要的重复或过深的嵌套。

总结一下这篇文章: