Pymongo的update_one()返回带有AttributeError的UpdateResult

时间:2016-02-10 12:20:39

标签: python mongodb pycharm pymongo pymongo-3.x

我刚刚将MongoDB和Pymongo升级到最新版本3.2.1,以便在调用 update_one()后能够使用UpdateResult对象。 但由于某种原因,返回的对象有一个包含 AttributeError 的字段。

看一下我的Pycharm screen。您可以看到 _UpdateResult__acknowledged

'Traceback (most recent call last):
  File "/opt/pycharm-community-5.0.4/helpers/pydev/pydevd_resolver.py", line 191, in _getPyDictionary
    attr = getattr(var, n)
AttributeError: _UpdateResult__acknowledged'

它导致我出现问题,因为我试图捕获所有异常,每次我需要在代码中使用update_one()时,我都会遇到此异常。

这是我的代码片段:

QUERY = {id: '1234'}
try:
    record = mongoCollection.find_one(QUERY)
    if record is None:
        print 'Add new Record'
    else:
        updateResult = mongoCollection.update_one(
            QUERY,
            {'$addToSet': {'info': getInfo()}}
        )

        if updateResult['modified_count'] == 1:
            mongoCollection.update_one(
                QUERY,
                {'$inc': {'infoCount': 1}}
            )
        print 'Record exists, updating if needed'
except:
    print 'Failed to add/update'

幸运的是,我找到了一个不会导致引发此异常的解决方法。 而不是使用 update_one(),我可以使用不推荐使用的函数 update(),它只返回MongoDB的RAW结果,而不是比较 updateResult [&# 39; modified_count'] ,我可以比较updateResult [' nModified']。

但这绝对不是使用弃用函数的最佳实践...... :(

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

对于那些可能遇到同样错误的人,我可以在这里得到答案:https://jira.mongodb.org/browse/PYTHON-1055

简而言之,因为UpdateResult不是python字典,并且没有实现 getitem 。问题是尝试 updateResult [' modified_count'] == 1 , 相反,我应该使用 updateResult.modified_count == 1 ,因为UpdateResult.modified_count是一个属性。