0

データストレージにmongodbを使用するソフトウェアを作成しました。クエリがデータを返した後、BSONObj はさまざまな場所で使用されます。

現時点では、クエリによって返される BSONObj の C++ 側の変更の可能性を追加する必要があります。後の部分はかなり大きいので、クエリの部分しか変更できませんが、BSONObj と BSONElement の参照を見ると、編集のたびに再構築せずに BSONObj を編集する正しい方法がわかりません。

変更コードは次のようになります。

mongo::BSONObj obj=GetQueryResults(); 
vector<mongo::BSONObj> mods=GetMods();
for(auto mod:mods){
   mod=mod.remove_field("_id");
   std::set<std::string> fields;
   mod.getFieldNames(fields);
   for(auto & field: fields){
        if(obj.hasElement(field)){
           // rebuild with field modified?
           // this includes both value replacement
           // and something like incrementing etc. 
        }else{
           // rebuild with extra field? 
        }

    }
}     

私が調べたオプションの 1 つは、シングルを作成してBSONObjBuilderそれを変更することでしたが、オブジェクトをクエリするオプションは提供されず、ドキュメントには既存のフィールドとappend().

4

1 に答える 1