为pymongo的remove设置justOne限制器时出现TypeError
在 Python 2.7.3 和 pymongo 2.7 的环境下
我正在尝试在从 pymongo 的集合中删除文档时设置 justOne 安全限制器。
ufo.users
指向一个有效的、已经初始化的集合。
>>> type(ufo.users)
<class 'pymongo.collection.Collection'>
>>> ufo.users.remove({'emails.address': 'foo@bar.com'}, {'justOne': True})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/action/.local/lib/python2.7/site-packages/pymongo/collection.py", line 645, in remove
safe, options = self._get_write_mode(safe, **kwargs)
File "/home/action/.local/lib/python2.7/site-packages/pymongo/common.py", line 693, in _get_write_mode
validate_boolean('safe', safe)
File "/home/action/.local/lib/python2.7/site-packages/pymongo/common.py", line 75, in validate_boolean
raise TypeError("Wrong type for %s, value must be a boolean" % (option,))
TypeError: Wrong type for safe, value must be a boolean
把 justOne 的值设置为 'True'、'true'、1 或 '1',都会出现同样的错误信息。
查看我本地的包缓存时,我发现了 pymongo/common.py
中应该负责验证的函数:
def validate_boolean(option, value):
"""Validates that 'value' is 'true' or 'false'.
"""
if isinstance(value, bool):
return value
elif isinstance(value, basestring):
if value not in ('true', 'false'):
raise ConfigurationError("The value of %s must be "
"'true' or 'false'" % (option,))
return value == 'true'
raise TypeError("Wrong type for %s, value must be a boolean" % (option,))
但是……我不太明白。我尝试传递 'true' 和 True……
这是这个包里的一个 bug 吗?
我需要怎么做才能正确设置 justOne 选项呢?
1 个回答
3
在使用pymongo的时候,参数有点不同,具体可以参考文档
ufo.users.remove({'emails.address': 'foo@bar.com'}, safe=True)
这样做就可以解决问题了