文档菜单
文档首页
/ / /
C++ 驱动
/

插入文档

本页内容

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

在本指南中,您可以了解如何使用C++驱动程序通过执行插入操作将文档添加到MongoDB集合。

插入操作将一个或多个文档插入MongoDB集合。您可以通过以下方式执行插入操作:insert_one()方法来插入单个文档或insert_many()方法来插入多个文档。

本指南中的示例使用来自Atlas示例数据集sample_restaurants.restaurants集合。要从您的C++应用程序访问此集合,请实例化一个连接到Atlas集群的client,并将以下值分配给您的dbcollection变量

auto db = client["sample_restaurants"];
auto collection = db["restaurants"];

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

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

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

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

  • 您可以让驱动程序为每个文档的 _id 自动生成唯一的 ObjectId 值。

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

注意

重复的 _id 值违反了唯一索引约束,这会导致驱动程序返回一个 mongocxx::bulk_write_exception 错误。

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

有关文档结构和规则的信息,请参阅 MongoDB 服务器手册中的 文档 指南。

要将单个文档添加到 MongoDB 集合,请调用 insert_one() 方法,并传入您想要添加的文档。

以下示例将文档插入到 restaurants 集合中

auto result = collection.insert_one(make_document(kvp("name", "Mongo's Burgers")));

要将多个文档添加到 MongoDB 集合中,请调用 insert_many() 方法,并传递一个存储您想要添加的文档的向量。

以下示例将两个文档插入到 restaurants 集合中

std::vector<bsoncxx::document::value> restaurants;
restaurants.push_back(make_document(kvp("name", "Mongo's Burgers")));
restaurants.push_back(make_document(kvp("name", "Mongo's Pizza")));
auto result = collection.insert_many(restaurants);

您可以通过传递一个 mongocxx::options::insert 类的实例作为可选参数来修改 insert_one()insert_many() 方法的行为。以下表格描述了您可以在 mongocxx::options::insert 实例中设置的字段

字段
描述

bypass_document_validation

如果设置为 true,允许写入操作绕过 文档级验证
默认值为 false
类型: bool

write_concern

设置操作的写关注。
默认值为命名空间的写关注。
类型: mongocxx::write_concern

ordered

如果设置为 true,当一次插入失败时,操作停止插入文档。如果为 false,当一次插入失败时,操作继续插入剩余的文档。
默认值为 true
类型: bool

comment

附加到操作的注释。有关更多信息,请参阅 MongoDB 服务器手册中的 插入命令字段 指南。
类型: bsoncxx::types::bson_value::view_or_value

以下代码使用 insert_many() 方法向集合中插入三个新文档。由于在 mongocxx::options::insert 实例中,bypass_document_validation 字段被设置为 true,此插入操作绕过了文档级别的验证

std::vector<bsoncxx::document::value> docs;
docs.push_back(make_document(kvp("name", "Mongo's Burgers")));
docs.push_back(make_document(kvp("name", "Mongo's Pizza")));
docs.push_back(make_document(kvp("name", "Mongo's Tacos")));
mongocxx::options::insert opts;
opts.bypass_document_validation(true);
auto result = collection.insert_many(docs, opts);

有关使用 C++ 驱动程序插入文档的可运行代码示例,请参阅将数据写入 MongoDB.

要了解更多关于本指南中讨论的任何方法或类型的信息,请参阅以下 API 文档

返回

写入数据