我刚刚将我的 MongoDB 和 Pymongo 升级到最新版本 3.2.1,以便在调用update_one()后能够使用UpdateResult对象。但是由于某种原因,返回的对象有一个包含AttributeError的字段。
看看我的Pycharm 屏幕。你可以看到_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['modified_count'],我可以只比较 updateResult['nModified'] 。
但这绝对不是使用不推荐使用的函数的最佳实践...... :(
有什么想法吗?