データストレージに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()
.