文档菜单
文档首页
/ / /
Java 反应式流驱动程序
/

插入文档

本页内容

  • 概述
  • 示例数据
  • _id 字段
  • 插入单个文档
  • 插入多个文档
  • 修改插入行为
  • 示例
  • 附加信息
  • API 文档

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

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

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

要了解如何创建免费的 MongoDB Atlas 集群和加载数据集,请参阅入门教程。

重要

项目 Reactor 库

本指南使用 Project Reactor 库来消费由 Java 反应式流驱动程序方法返回的 Publisher 实例。要了解更多关于 Project Reactor 库及其使用方法,请参阅 Reactor 文档中的 入门。要了解更多关于本指南中如何使用 Project Reactor 库方法,请参阅 将数据写入 MongoDB 指南。

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

MongoDB 允许您以两种方式管理此字段

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

  • 您可以允许驱动程序自动为每个文档的 _id 字段生成唯一的 ObjectId 值。如果您未手动设置文档的 _id 值,则驱动程序会使用 ObjectId 填充字段。

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

注意

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

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

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

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

以下示例使用 insertOne() 方法在 restaurants 集合中插入一个名为 "Mongo's Burgers" 的文档。

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响应式流中,驱动程序方法返回冷Publisher实例,这意味着除非你订阅返回的Publisher,否则相应的操作不会发生。本指南使用Project Reactor库来消费它们。有关Mono的更多信息,请参阅Project 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 服务器手册中的插入命令字段指南。

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 驱动程序插入文档的可运行代码示例,请参阅写入 MongoDB 数据指南。

有关本指南中讨论的任何方法或类型,请参阅以下 API 文档

返回

写入数据