Dea*_*hen 5 mongodb mongodb-query mongo-cxx-driver
我很困惑,在在线文档的代码片段中,它显示了调用update_many方法时finalize的用法,如下所示:
mongocxx::stdx::optional<mongocxx::result::update> result =
collection.update_many(
document{} << "i" << open_document <<
"$lt" << 100 << close_document << finalize,
document{} << "$inc" << open_document <<
"i" << 100 << close_document << finalize);
Run Code Online (Sandbox Code Playgroud)
但我已经看到mongocxx驱动程序代码中的示例代码没有finalize
// Update multiple documents.
{
// @begin: cpp-update-multiple-documents
bsoncxx::builder::stream::document filter_builder, update_builder;
filter_builder << "address.zipcode"
<< "10016"
<< "cuisine"
<< "Other";
update_builder << "$set" << open_document << "cuisine"
<< "Category To Be Determined" << close_document << "$currentDate"
<< open_document << "lastModified" << true << close_document;
db["restaurants"].update_many(filter_builder.view(), update_builder.view());
// @end: cpp-update-multiple-documents
}
Run Code Online (Sandbox Code Playgroud)
那么使用finalize或不使用它有什么区别?如何做出选择?
要了解这两种构造之间的差异,我们需要通过深入研究源代码和文档中的使用 BSON 文档页面来了解拥有 BSON 文档(值)和非拥有 BSON 文档(视图)之间的差异。
拥有 BSON 文档(其类型)bsoncxx::document::value代表那些拥有其数据缓冲区的文档,因此当 值超出范围时,其缓冲区将被释放。您可以在这里了解范围,如果您不熟悉,可以在这里了解更多信息。
finalizebsoncxx::document::value从临时缓冲区返回 BSON 类型的文档。因此finalize返回一个Owning BSON Document。
另一方面,非拥有 BSON 文档是 ; 的实例bsoncxx::document::view;拥有 BSON 文档的视图。正如文档中提到的,
在性能关键的代码中,传递视图比使用值更好,因为我们可以避免过多的复制。此外,传递文档视图允许我们多次使用该文档。
另外,在BSON 文档生命周期中,还明确提到了一个示例:
必须比使用它们的
document::values人更长寿document::views。如果基础值被清理,视图将留下一个悬空指针。
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |