检查mongocxx collection.create_index()是否成功

时间:2018-01-02 13:20:04

标签: mongodb mongo-cxx-driver

我正在使用mongocxx使用以下代码在Mongo中创建索引:

auto index_specification = bsoncxx::builder::stream::document{} << "_tablename" << 1 << "rowuuid" << 1 << bsoncxx::builder::stream::finalize;
auto result = coll.create_index(std::move(index_specification));

但是,我不知道如何检查它是否成功。我试图打印出结果:

printf((const char*) result.view().data());

但我只是得到一个&amp;字符。我一直在寻找互联网,但我找不到答案。

1 个答案:

答案 0 :(得分:2)

最近我发现自己遇到了同样的问题。要知道create_index操作是否成功,您应该不会抛出任何异常并检查是否存在一个带有&#34; name&#34;在返回的document::value中。下面是一个知道如何检查成功的create_index操作的完整示例(主要从与src/mongocxx/tests/collection.cpp中的集合相关的测试中提取):

bool success = false;
try {
  mongocxx::client a {
    mongocxx::uri {
      "mongodb://localhost:27017"
    }
  };
  mongocxx::database database = a.database("test");
  mongocxx::collection collection = database["test-collection"];
  collection.drop();
  collection.insert_one({}); // Ensure that the collection exists.

  bsoncxx::document::value index = bsoncxx::builder::stream::document {} << "a" << 1 << bsoncxx::builder::stream::finalize;

  std::string indexName {
    "myName"
  };
  mongocxx::options::index options {};
  options.name(indexName);

  bsoncxx::document::value result = collection.create_index(index.view(), options);
  bsoncxx::document::view view = result.view();
  if (not view.empty() && view.find("name") != view.end()) {
    success = true;
    std::cout << bsoncxx::to_json(view) << std::endl;
  }
} catch (mongocxx::exception e) {
  std::cerr << e.what() << ":" << e.code().value() << std::endl;
} 

对于这个非常晚的答案感到抱歉,但我今天才发现,正在搜索与mongo-driver-cxx相关的其他主题。

我希望它仍然适合你!