Docs 菜单
Docs 主页
/ / /
Java Reactive Streams 驱动程序
/

插入文档

在此页面上

  • Overview
  • 样本数据
  • _id 字段
  • 插入一个文档
  • 插入多个文档
  • 修改插入行为
  • 例子
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何使用Java Reactive Streams驾驶员通过执行插入操作将文档添加到MongoDB集合。

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

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

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

重要

项目 Reactor 库

本指南使用 Project ReactorPublisher 库来使用Java Reactive Streams驾驶员方法返回的 实例。要学习;了解有关 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.from() Mono方法。Mono 是 Project Reactor 库中的一个类。在Java Reactive Streams 中,驾驶员方法会返回Publisher冷实例,这意味着除非您订阅返回的Publisher ,否则不会发生相应的操作。 本指南使用 Project Reactor 库来使用它们。 要学习;了解有关Mono 的更多信息,请参阅 Mono 在 Project Reactor 文档中。

以下示例使用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.from() Mono方法。Mono 是 Project Reactor 库中的一个类。在Java Reactive Streams 中,驾驶员方法会返回Publisher冷实例,这意味着除非您订阅返回的Publisher ,否则不会发生相应的操作。 本指南使用 Project Reactor 库来使用它们。 要学习;了解有关Mono 的更多信息,请参阅 Mono 在 Project Reactor 文档中。

以下示例使用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)
If set to True, allows the write to opt out of document-level validation.
Defaults to False.
toString()
If used, returns a string representation of the object.
comment(BsonValue comment)
A comment to attach to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.

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

方法
说明
ordered(Boolean ordered)
If set to True, the driver sends documents to the server in the order provided. If an error occurs, the driver and server cancel all remaining insert operations.
Defaults to 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驾驶员插入文档的可运行代码示例,请参阅Write Data to MongoDB指南。

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

后退

写入数据