9

我已经使用 mongo 一段时间了(使用 python、mongo 2.4.4 64 位、OS X 10.8.2、pymongo 2.5.2、python 2.7.2),我观察到一个奇怪的行为。有时在尝试将文档插入集合时会引发以下异常:

无法编码对象:ObjectId('51861bc79bb6550f2b98be23')

...“/Users/nutrina/www/env_pdf_admin_apache/lib/python2.7/site-packages/pymongo/collection.py”,第 266 行,保存返回 self.insert(to_save,操作,安全,check_keys,** kwargs)文件“/Users/nutrina/www/env_pdf_admin_apache/lib/python2.7/site-packages/pymongo/collection.py”,第 357 行,插入 continue_on_error,self.__uuid_subtype),安全)无效文档:无法编码对象: ObjectId('51861bc79bb6550f2b98be23')

我不知道为什么会这样。有没有其他人遇到过这个错误,或者有人知道可能导致它的原因吗?

更新: 我要保存的对象具有以下结构:

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

为字段 *user_id* 报告了错误,但我很确定该值是有效的 ObjectId。这是来自另一个集合(用户)的对象(用户)的“_id”。并且大多数情况下,相同值的保存操作都会成功。

谢谢,杰拉德

4

2 回答 2

15

Python 整数存储为任意精度数,Mongodb 不支持。您需要先将它们转换为普通的 int64 或字符串对象。

于 2016-01-04T16:31:12.977 回答
2

如果您没有在文档中使用原生类型(字符串、整数、日期、布尔值等),则需要确保其编码正确。如果您没有正确编码非标准数据类型,则无法保证它可以插入 PyMongo。您可能遇到了一个边缘情况,它拒绝将您的新对象构建到 PyMongo 文档中。

PyMongo:自定义类型

于 2013-08-25T17:16:16.653 回答