Вставка больших объектов BSON не работает

Я пытаюсь написать программу на C ++ для чтения, обработки и обновления моей базы данных. У меня проблема с вставкой моих данных в монго. Поэтому для моего рабочего процесса я получаю запрос на обновление документа. Я запрашиваю документ и обновляю данные. Затем я пытаюсь сделать обновление документа.

У меня есть функция, которая преобразует мой объект класса в BSONObj через BSONObjBuilder. Кажется, у меня проблема с большими массивами подобъектов. Например, в моем документе есть поле с именем geo, которое выглядит так:

geo: [{"postal": 10012},{"postal":10013},...,{"postal":90210}]

и хранится в C ++ как:

std::vector<mongo::BSONObj> geo;

в этом поле могут быть тысячи почтовых индексов. При выполнении:

db.get()->update("db.collection",BSON("id"<<id_), BSON($set<<updateObj));

где updateObj — это объект, который я получил от моего BSONObjBuilder, в mongo ничего не обновляется. Если я удалю поле гео, все будет вставлено.

Я пытался просто сделать

db.get()->update("db.collection",BSON("id"<<id_), BSON($set<<BSON("geo" << geo)));

Подумав, может быть, необходимо выполнить отдельные запросы из-за размера объекта, и это также не приведет к обновлению.

Мне было интересно, если я каким-то образом достигал какого-то предела размера BSON в C ++.

Единственная причина, по которой я считаю, что это ограничение размера, заключается в том, что при попытке отладить эту проблему я попытался вызвать updateObj.toString (), чтобы распечатать объект, который я пытался вставить, и он выдал исключение: Element extends past end of object, Я предполагаю, что это означает, что я достиг определенного типа максимального размера объекта / элемента.

Любое понимание этой проблемы будет с благодарностью.

Спасибо

0

Решение

Казалось, я понял это. Случилось так, что я получил гео-поле в одной функции, сохранил его в векторе и использовал его в другой. Я не использовал .Obj (). Copy () при сохранении объекта в векторе, я просто сохранил .Obj () из результатов запроса, и когда я пошел на вставку, я думаю, что недействительные указатели взорвали BSONObj и вызвали ошибка.

0

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