2014-05-14 3 views
0

데이터베이스를 읽고 조작하고 업데이트하는 프로그램을 C++로 작성하려고합니다. mongo에 데이터를 삽입하는 데 문제가 있습니다. 따라서 작업 흐름을 위해 문서를 업데이트하라는 요청을받습니다. 문서를 쿼리하고 데이터를 업데이트합니다. 그런 다음 문서에 대한 업데이트를 시도합니다.큰 BSON 개체 삽입이 작동하지 않습니다.

나는 클래스 객체를 BSONObjBuilder를 통해 BSONObj로 변환하는 함수를 가지고있다. 큰 하위 배열의 배열에 문제가있는 것 같습니다.

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

이 필드는 우편 번호의 수천이있을 수 있습니다

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

와 같이 ++ C에 저장됩니다 예를 들어, I는 다음과 같습니다 내 문서라는 지리적에서 필드가 그 안에. 일시 : updateObj 내가 내 BSONObjBuilder에서 얻은 OBJ입니다

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

를, 아무것도 몽고에 업데이트되지 않습니다. 지역 입력란을 삭제하면 모든 항목이 삽입됩니다.

난 그냥 것이 필요 인해 OBJ의 크기에 별도의 쿼리를 수행하고이 또한 업데이트 없음을 초래할 어쩌면 생각
db.get()->update("db.collection",BSON("id"<<id_), BSON($set<<BSON("geo" << geo))); 

을하려고 노력했다.

어떻게 든 C++에서 일종의 BSON 크기 제한을 치는 지 궁금합니다.

이 문제를 디버깅하는 동안 updateObj.toString()을 호출하여 삽입하려고하는 객체를 인쇄하려고 시도했는데 예외가 발생했기 때문에 크기 제한이 있다고 생각하는 유일한 이유는 다음과 같습니다. Element extends past end of object. 나는 이것이 개체/요소의 최대 크기의 어떤 유형에 부딪혔다 고 가정합니다.

이 문제에 대한 통찰력은 크게 감사하겠습니다.

고맙습니다.

답변

0

나는 그것을 알아 냈습니다. 무슨 일이 일어 났는지 나는 하나의 함수에서 지리 필드를 가져 와서 벡터에 저장하고 다른 곳에 사용했다. 나는 .Obj(). copy()를 사용하여 벡터에 객체를 저장하는 동안 쿼리 결과에서 .Obj()를 저장했는데 삽입하려고하면 잘못된 포인터가 BSONObj를 날려 버렸고 오류.

관련 문제