当前位置: 首页 > 知识库问答 >
问题:

InvalidDocument:无法编码对象:ObjectId(' 51861 BC 79 bb 6550 F2 b 98 be 23 ')

贲骏喆
2023-03-14

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

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

…"/用户/网络/www/env_pdf_admin_apache/lib/python2.7/站点包/pymongo/collection.py",第266行,在保存返回self.insert(to_save,操纵,安全,check_keys,**kwargs)文件"/用户/网络/www/env_pdf_admin_apache/lib/python2.7/站点包/pymongo/collection.py",第357行,在插入continue_on_error,自我。__uuid_subtype),安全)InvalidDocument:不能编码对象:ObjectId('51861bc79bb6550f2b98be23')

我不知道为什么会这样。有没有其他人遇到过这个错误,或者有人知道是什么导致了这个错误?

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

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

字段*user_id*报告了错误,但我非常确定该值是有效的ObjectId。这是来自另一个集合(用户)的对象(用户)的“_id”。大多数时候,对于相同的值,保存操作会成功。

谢谢,杰拉德

共有2个答案

赵雪峰
2023-03-14

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

PyMongo: 自定义类型

龚浩宕
2023-03-14

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

 类似资料:
  • 问题内容: 我正在尝试向我的Watchkit扩展发送“类”,但出现此错误。 由于未捕获的异常’NSInvalidUnarchiveOperationException’而终止应用程序,原因:’ -[NSKeyedUnarchiver encodeObjectForKey:]:无法解码类(MyApp.Person)的对象 存档和取消存档在iOS App上运行良好,但在与watchkit扩展进行通信时

  • 问题内容: 我在JSON方面遇到问题,我似乎无法弄清为什么它不起作用。这应该输出JSON。 这是我的代码 我收到这个错误 如果有人可以救援,那就太好了! 问题答案: 看来您的JSON无效。在这种情况下,这完全取决于服务器发送给您的数据(您未显示)。我建议通过JSON验证程序运行响应。

  • 问题内容: 我的文件在第一行都有编码定义器,就像我的 正如我在相关问题上提到的那样,我用来返回api文档。由于我通过以下方式定义编码: 一切正常,当我调用我的API服务时,除了 由pprint由字典形成的字符串 外 , 没有任何编码问题 __ 由于我在字典中的某些值中使用土耳其语字符,因此pprint将其转换为等效的字符,例如: 我的纯文本输出如下: 我尝试将pprint输出解码或编码为不同的编码

  • 我正试图抓取一个网站,但它给了我一个错误。 我正在使用以下代码: 我得到了以下错误: 我能做些什么来解决这个问题?

  • 我的代码适用于英语文本,但不适用于俄语search_text。我怎么才能修好它? 错误文本 UnicodeEncodeError:“latin-1”编解码器无法对位置41-46中的字符进行编码:正文('МССаа')不是有效的latin-1。使用身体。如果要发送utf-8编码的文件,请对其进行编码(“utf-8”)。 我的代码 我试过了 但是收到的

  • 问题内容: 希望我不必在这里重新发明轮子,但是有人知道C#中是否有一个类似于Adobe为AS3提供的类,用于将通用对象转换为JSON字符串的类? 例如,当我编码一个对象数组时。 输出: 问题答案: 在C#中: