2013-08-25 12 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或字符串对象。

相关问题