【问题标题】:bson.errors.InvalidDocument: Cannot encode object: Truebson.errors.InvalidDocument:无法编码对象:真
【发布时间】:2014-06-03 21:13:41
【问题描述】:

使用 python 在 Mongo 中插入文档时出现错误。

    document = {u'Status': 'Active',
     u'Installation': {u'IsFrugal': True,  u'IsFeatureSet': True,  u'IsEvolving': True, u'IsAffordable': True}, 
      u'AutoList': [u'IsFeatureSet', u'IsAffordable', u'IsFrugal'] 
    }

TraceBack 错误是

    C:\Python27\lib\site-packages\pymongo-2.5.1_-py2.7-win32.egg\pymongo\collection.
    py:357: RuntimeWarning: couldn't encode - reloading python modules and trying ag
    ain. if you see this without getting an InvalidDocument exception please see htt
    p://api.mongodb.org/python/current/faq.html#does-pymongo-work-with-mod-wsgi
      continue_on_error, self.__uuid_subtype), safe)
    Traceback (most recent call last):
      File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
        "__main__", fname, loader, pkg_name)
      File "C:\Python27\lib\runpy.py", line 72, in _run_code
        exec code in run_globals
      File "D:\Office_Drive\RetailReco\contactsnew\rrpython\rcauto.py", line 28, in
    <module>
        rceval.AutoProcess()
      File "C:\Python27\lib\site-packages\rrpython-0.1-py2.7.egg\rrpython\automizati
    on.py", line 67, in AutoProcess
        self._configdb[RCEVALPMTS].save(tempdict)
      File "C:\Python27\lib\site-packages\pymongo-2.5.1_-py2.7-win32.egg\pymongo\col
    lection.py", line 266, in save
        return self.insert(to_save, manipulate, safe, check_keys, **kwargs)
      File "C:\Python27\lib\site-packages\pymongo-2.5.1_-py2.7-win32.egg\pymongo\col
    lection.py", line 357, in insert
        continue_on_error, self.__uuid_subtype), safe)
    bson.errors.InvalidDocument: Cannot encode object: True
    
    "bson.errors.InvalidDocument: Cannot encode object: True"

当我使用 True 的“真”实例时,它运行良好,但它会插入一个字符串值,我想添加布尔值,而不是字符串。

当我尝试插入简单的{"name": True} 时,它运行良好。怎么可能?怎么了?

【问题讨论】:

  • 这个问题对任何作者或选民来说仍然相关吗?

标签: python python-2.7 pymongo


【解决方案1】:

这仅仅是因为 json 中没有 True 之类的东西(或者 bson 是 mongo 中实际使用的格式,但它们密切相关)。您可以将文档编码为 json,然后将其插入 mongo,而不是手动将其更改为 'true' 字符串:

import json
document = {u'Status': 'Active',
   u'Installation': {u'IsFrugal': True,  u'IsFeatureSet': True,  u'IsEvolving': True, 
   u'IsAffordable': True}, 
   u'AutoList': [u'IsFeatureSet', u'IsAffordable', u'IsFrugal'] 
}
jsonified_document = json.dumps(document)

【讨论】:

  • JSON 中有true 而Python 中有True,pymongo 会自动进行这种转换
【解决方案2】:

根据堆栈跟踪,tempdict 可能是值 True,而不是由于应用程序中其他地方的问题(例如 rrpython 库)而要插入的数据字典。

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 2015-08-13
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2019-08-15
    相关资源
    最近更新 更多