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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо


person Eumcoz    schedule 14.05.2014    source источник


Ответы (1)


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

person Eumcoz    schedule 14.05.2014