插入文档
概述
在本指南中,您可以了解如何使用C++驱动程序通过执行插入操作将文档添加到MongoDB集合。
插入操作将一个或多个文档插入MongoDB集合。您可以通过以下方式执行插入操作:insert_one()
方法来插入单个文档或insert_many()
方法来插入多个文档。
示例数据
本指南中的示例使用来自Atlas示例数据集的sample_restaurants.restaurants
集合。要从您的C++应用程序访问此集合,请实例化一个连接到Atlas集群的client
,并将以下值分配给您的db
和collection
变量
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
要了解如何创建免费的MongoDB Atlas集群并加载示例数据集,请参阅Atlas入门指南。
字段 _id
在 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
实例中设置的字段
字段 | 描述 |
---|---|
| |
| 设置操作的写关注。 默认值为命名空间的写关注。 类型: mongocxx::write_concern |
| 如果设置为 true ,当一次插入失败时,操作停止插入文档。如果为 false ,当一次插入失败时,操作继续插入剩余的文档。默认值为 true 。类型: bool |
| 附加到操作的注释。有关更多信息,请参阅 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 文档
要了解更多关于本指南中讨论的任何方法或类型的信息,请参阅以下 API 文档