mongodb — правильное изменение mongo :: BSONObj в переполнении стека

Я написал программное обеспечение, которое использует 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(),

0

Решение

Я думаю, что вы хотите сделать что-то подлое с вашей идеей. Но, к сожалению, если я правильно помню, вы не можете изменить готовый объект BSON. Готово, я имею в виду завершено

Кстати, это был не вопрос.

Если вы хотите отфильтровать результат запроса, используйте структуру агрегации MongoDB. Как и вам нужно только имя пользователя из огромной коллекции документов.

Это поможет вам.

справочник по командам клиента (версия: 2.3.2)

пример клиентских команд

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]