2013-08-25 1 views
7

나는 잠시 동안 mongo를 사용하고 있습니다. (파이썬, mongo 2.4.4 64 비트, OS X 10.8.2, pymongo 2.5.2, python 2.7.2), 나는 이상한 행동을 관찰했다.InvalidDocument : 객체를 인코딩 할 수 없습니다 : ObjectId ('51861bc79bb6550f2b98be23')

개체를 인코딩 할 수 없습니다 : ObjectId가을 ('51861bc79bb6550f2b98be23')

... "/ 사용자/nutrina/www /에서 env_pdf_admin_apache/lib 디렉토리 모음에 문서를 삽입 할 때 가끔 예외를 다음 던졌습니다 /python2.7/site-packages/pymongo/collection.py ", 줄 266, 저장 return self.insert (to_save, 조작, 안전, check_keys, ** kwargs) 파일 "사용자/nutrina/www/env_pdf_admin_apache/lib/python2.7/site-packages/pymongo/collection.py ", 줄 357, 삽입 continue_on_error, self .__ uuid_subtype), 안전) InvalidD ocument는 : 객체를 인코딩 할 수 없습니다 ObjectId가을 ('51861bc79bb6550f2b98be23')

나는 이런 일이 왜 아무 생각이 없습니다. 다른 사람이이 오류가 발생 했습니까? 아니면 누군가가 원인을 알 수 있습니까?

업데이트 : 내가 저장하려고 목적은 구조 다음과 같습니다

{ 
    'is_open': true, // boolean 
    'data': { 
     'user_id': ObjectId(...), // ObjectId 
     'user_type': 1,   // Integer 
    } 
} 

오류는 필드 * USER_ID의 *에 대해보고,하지만 난 값이 유효한 ObjectId가 있음을 확신한다. 이것은 다른 콜렉션 (사용자)의 오브젝트 (사용자)의 '_id'입니다. 그리고 저장 조작은 대부분 동일한 시간에 성공합니다.

덕분에, 제럴드

+0

저장할 개체를 다른 개체로 공유 할 수 있습니까? 어떤 유형의 데이터가 포함되어 있습니까? – WiredPrairie

+0

여기 좀 봐 http://stackoverflow.com/a/18414699/535962 – lovesh

+0

문제의 설명을 업데이트했습니다. @lovesh : 나는 그 문제가 관련 있다고 생각하지 않는다. – nutrina

답변

1

당신이 당신의 문서 (문자열, 정수, 날짜, 부울 등)의 기본 형식을 사용하지 않는 경우 당신은 올바르게 인코딩 된 확인해야합니다. 비표준 데이터 유형을 올바르게 인코딩하지 않으면 PyMongo에 삽입 할 수 있다고 보장 할 수 없습니다. 새로운 객체를 PyMongo 문서로 만드는 것을 거부하는 최악의 경우를 치고있을 것입니다.

PyMongo: Custom Types

+0

글쎄,'ObjectId'는 pymongo와 mongodb 모두에서 지원되는 기본 유형이라고 생각합니다.그래서 뭔가 다른 OP가 잘못 될해야합니다. –

+0

예, 예외가 throw 된 표준 형식이며 유효한 ObjectId이며 설정 한 값이 유효하다는 것이 확실합니다. 문제 설명에 대한 제 업데이트를 참조하십시오. – nutrina

10

파이썬 정수는 MongoDB에 의해 지원되지 않는 임의 정밀도 번호로 저장된다. 먼저 일반 int64 또는 문자열 객체로 변환해야합니다.

관련 문제