正确修改C 中的Mongo :: BSONOBJ

Correctly modifying mongo::BSONObj in C++

本文关键字:Mongo BSONOBJ 中的 修改      更新时间:2023-10-16

我写了一个使用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()

我想您想用自己的想法做一些偷偷摸摸的事情。但是可悲的是,如果我没记错的话,您将无法修改成品BSON对象。我的意思是完成。

顺便说一句,这不是一个问题。

如果要过滤查询结果,请使用MongoDB聚合框架。就像您只需要大量文档中的用户名称一样。

这将为您提供帮助。

客户端命令参考(VER:2.3.2)

客户端命令的示例