对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

插入文档

在本指南中,您可以学习如何使用Java Reactive Streams驱动程序通过执行插入操作将文档添加到MongoDB集合。

插入操作将一个或多个文档插入MongoDB集合。 您可以使用insertOne()insertMany()方法执行插入操作。

本指南中的示例使用来自 Atlas 示例数据集sample_restaurants.restaurants 集合。

要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅入门教程。

重要

项目 Reactor 库

本指南使用 Project Reactor 库来使用Java Reactive Streams驱动程序方法返回的 Publisher 实例。要学习;了解有关 Project Reactor 库及其使用方法的更多信息,请参阅 Reactor 文档中的入门。要进一步学习;了解如何使用本指南中的 Project Reactor 库方法,请参阅“将数据写入MongoDB”指南。

在 MongoDB 集合中,每个文档必须包含具有唯一字段值的 _id 字段。

MongoDB 允许您通过两种方式管理该字段:

  • 您可以自行为每个文档设置此字段,确保每个 _id 字段的值都是唯一的。

  • 您可以让驱动程序自动为每个文档_id生成唯一的ObjectId值。 如果您没有为文档手动设置_id值,驱动程序将使用ObjectId填充该字段。

除非您可以保证唯一性,否则我们建议让驱动程序自动生成_id值。

注意

重复的 _id 值违反了唯一索引约束条件,会导致驱动程序从 insertOne() 返回 WriteError,或从 insertMany() 返回 BulkWriteError

要了解有关_id字段的更多信息,请参阅 MongoDB Server 手册中的唯一索引指南。

要了解有关文档结构和规则的更多信息,请参阅 MongoDB Server 手册中的文档指南。

要将单个文档添加到MongoDB集合,请调用 insertOne() 方法并传递要添加的文档。然后,将 insertOne() 结果传递给 Mono 中的静态 Mono.from() 方法。 Mono 是 Project Reactor 库中的一个类。在Java Reactive Streams 中,驱动程序方法会返回 Publisher 冷实例,这意味着除非您订阅返回的 Publisher,否则不会发生相应的操作。本指南使用 项目 Reactor 库来使用它们。要学习;了解有关Mono 的更多信息,请参阅 项目 Reactor 文档中的 Mono。

以下示例使用insertOne()方法将name值为"Mongo's Burgers"的文档插入到restaurants集合中:

Document document = new Document("name", "Mongo's Burgers");
Publisher<InsertOneResult> insertPublisher = restaurants.insertOne(document);
Mono.from(insertPublisher).block();

要将多个文档添加到MongoDB集合,请调用 insertMany() 方法并传递要添加的文档列表。然后,将 insertMany() 结果传递给 Mono 中的静态 Mono.from() 方法。 Mono 是 Project Reactor 库中的一个类。在Java Reactive Streams 中,驱动程序方法会返回 Publisher 冷实例,这意味着除非您订阅返回的 Publisher,否则不会发生相应的操作。本指南使用 项目 Reactor 库来使用它们。要学习;了解有关Mono 的更多信息,请参阅 项目 Reactor 文档中的 Mono。

以下示例使用insertMany()方法将文档列表插入到restaurants集合中:

Document doc1 = new Document("name", "Mongo's Pizza");
Document doc2 = new Document("name", "Mongo's Coffee");
List<Document> documents = Arrays.asList(doc1, doc2);
Publisher<InsertManyResult> insertPublisher = restaurants.insertMany(documents);
Mono.from(insertPublisher).block();

InsertOneOptions类包含修改insertOne()方法行为的方法。 要使用InsertOneOptions类,请构造该类的新实例,然后调用其一个或多个方法来修改插入操作。 您可以将这些方法调用链接在一起。 要修改插入操作的行为,请将类实例和链式方法调用作为第二个参数传递给insertOne()方法。

您可以使用InsertManyOptions类以类似方式修改insertMany()方法。

您可以使用InsertOneOptions类中的以下方法来修改insertOne()方法。 所有方法都是可选的。

方法
说明

bypassDocumentValidation (Boolean bypassDocumentValidation)

如果设立为True ,则允许写入选择退出文档级验证。默认为
False

toString()

如果使用,则返回对象的字符串表示形式。

comment(BsonValue comment)

要附加到操作的注释。 有关更多信息,请参阅 MongoDB Server 手册中的插入命令字段指南。

InsertManyOptions类包含前面的方法,以及以下ordered()方法:

方法
说明

ordered(Boolean ordered)

如果设立为True ,则驾驶员按规定的顺序向服务器发送文档。如果发生错误,驾驶员和服务器会取消所有剩余的插入操作。默认为
True

以下代码使用insertMany()方法将新文档插入到restaurants集合中。 它还将bypassDocumentValidation(true)选项设置为 ,以绕过文档级验证。

Document doc1 = new Document("name", "Mongo's Burgers");
Document doc2 = new Document("name", "Mongo's Pizza");
Document doc3 = new Document("name", "Mongo's Coffee");
List<Document> documents = Arrays.asList(doc1, doc2, doc3);
Publisher<InsertManyResult> insertPublisher =
restaurants.insertMany(documents,
new InsertManyOptions().bypassDocumentValidation(true));
Mono.from(insertPublisher).block();

有关使用Java Reactive Streams驾驶员插入文档的可运行代码示例,请参阅增删改查操作指南。

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: