2017-02-17 3 views
1

私はいくつかのデータをMongoDBデータベースに保存する方法を使用しています。MongoDBのC++でのinsert_many()メソッドの使い方は?

void save_data(std::vector<class_a> list){ 
    using namespace std; 
    using bsoncxx::builder::stream::document; 
    using bsoncxx::builder::stream::finalize; 

    std::vector<bsoncxx::document::value> documents; 
    for (size_t i = 0; i < list.size(); i++){ 
     documents.push_back(document{} 
      << "field 1" << list[i].get_data_1() 
      << "field 2" << list[i].get_data_2() 
      << finalize); 
    } 

    collection.insert_many(documents); 
} 

私はリストがclass_aの1つ以上のオブジェクトを格納していることを知っています。私はmongocxx::collectionオブジェクトcollectionのメソッドname()を使用してアクセス可能かどうかをテストしました。それは期待どおりにその名前を返しました。だから、クライアントセットがあると思う。しかし、insert_many()メソッドはエラーをスローします:

"mongoc_bulk_operation_execute() requires a client and one has not been set.: generic server error"

私は間違っていますか?

+0

書かれているように、コードはコンパイルされません。 ''コレクション ''はどこから来たのですか?私が最初に推測した理由は、 '' '' mongocxx :: client'''オブジェクトが生きていないということです。 '' collection''オブジェクトの存続期間は、それを作成した '' 'client'''オブジェクトの存続期間のサブセットでなければなりません。 – acm

+0

'collection'は' mongocxx :: collection'オブジェクトです。それはシングルトンパターン([ここを見てください](https://github.com/mongodb/mongo-cxx-driver/blob/releases/stable/examples/mongocxx/instance_management.cpp)のために生きています)。コレクション名を 'collection.name()'で表示してテストしました。 –

+0

私はその例の著者です。そのシングルトンは '' mongocxx :: instance''オブジェクトを生きています。しかし、 '' mongocxx :: client'''は生きていません。コードの完全な動作例を示すことをお勧めします。これは、何がうまくいかないのかを簡単に把握できるようにします。 – acm

答えて

0

ポインタstd :: unique_ptr _poolからの関数acquire()は、クライアントを返します。