2013-08-25 34 views
7

我一直在使用mongo一段時間才知道(用python,mongo 2.4.4 64位,OS X 10.8.2,pymongo 2.5.2,python 2.7.2 ),我觀察到一個奇怪的行爲。InvalidDocument:無法編碼對象:ObjectId('51861bc79bb6550f2b98be23')

不能編碼對象::物件( '51861bc79bb6550f2b98be23')

... 「/用戶/ nutrina/WWW/env_pdf_admin_apache/lib目錄有時它拋出試圖將文檔插入集合時下列異常/python2.7/site-packages/pymongo/collection.py「, 第266行保存返回self.insert(to_save,manipulate,safe, check_keys,** kwargs)文件 」/ Users/nutrina/www/env_pdf_admin_apache/lib/python2.7/site-packages/pymongo/collection.py「, line 357,in insert continue_on_error,self .__ uuid_subtype),safe) 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

應該出現其他問題。是的,它是拋出異常的標準類型,它是一個有效的ObjectId,我非常肯定我設置的值是有效的。請參閱我對問題描述的更新。 – nutrina

10

Python的整數被存儲爲任意精度數字,這是不通過的MongoDB支持。您需要先將它們轉換爲正常的int64或字符串對象。

相關問題