插入文档
Overview
在本指南中,您可以学习;了解如何使用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 Server 手册中的唯一索引指南。
要了解有关文档结构和规则的更多信息,请参阅 MongoDB Server 手册中的文档指南。
插入一个文档
要将单个文档添加到 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
实例中设立的字段:
字段 | 说明 |
---|---|
| If set to true , allows the write to opt out of
document-level validation.Defaults to false .Type: bool |
| Sets the write concern for the operation. Defaults to the write concern of the namespace. Type: mongocxx::write_concern |
| If set to true , the operation stops inserting documents when one insert
fails. If false , the operation continues to insert the remaining documents
when one insert fails.Defaults to true .Type: bool |
| A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. Type: bsoncxx::types::bson_value::view_or_value |
例子
以下代码使用insert_many()
方法将三个新文档插入到集合中。 由于bypass_document_validation
字段在mongocxx::options::insert
实例中设立为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 文档: