我编写了一个使用 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?
}
}
}
我研究的选项之一是创建一个单一的BSONObjBuilder
并对其进行修改,但它没有提供查询对象的选项,并且文档没有说明现有字段和append()
.