我很困惑,在online doc,的代码片段中,它显示了调用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);

但是我已经在mongocxx驱动程序代码中看到了示例代码而未完成
  // 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
    }

那么,使用finalize与不使用finalize有什么区别?如何选择?

最佳答案

要了解这两种构造之间的区别,我们需要通过深入了解Owning BSON Documents (values)的源代码和Non-owning BSON Documents (views)页面来了解Working with BSON documentdocumentation之间的区别。

拥有 bsoncxx::document::value 类型的BSON文档代表那些拥有其数据缓冲区的文档,因此当值超出范围时,其缓冲区将被释放。如果您不熟悉scope here,甚至还可以了解better here
finalize从临时缓冲区返回bsoncxx::document::value类型的BSON文档。因此,finalize返回一个拥有的BSON文档。

另一方面,非所有者BSON文档是 bsoncxx::document::view 的实例;拥有BSON文档的 View 。正如文档中所述,



同样在BSON Document lifetime中用示例明确提到

关于mongodb - 何时在mongodb cxx r3.0.2驱动程序中使用finalize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40615872/

10-16 17:04