YAP*_*PPO 2 mongodb pymongo python-2.7
我有一个 pymongo 集合,它的写关注选项如下:
>>> col1.__class__.__bases__
(<class 'pymongo.collection.Collection'>,)
>>> col1.write_concern
{'wtimeout': 6000}
Run Code Online (Sandbox Code Playgroud)
我试图在只有主可用的副本集中插入一个文档(从被阻止)
>>> pymongo.collection.Collection.update(col1, {'_id': '11'}, { "_id" : "11", "key": "test" }, upsert=True, fsync=False, w=2)
Run Code Online (Sandbox Code Playgroud)
pymongo 永远挂起。似乎设置 w=2 将默认 wtimeout 值显式覆盖为 0。如果我将 wtimeout=6000 发送给update它,它将按预期抛出异常。我错过了什么,还是应该以这种方式工作?
确实,如果您将任何写关注选项传递给“更新”,它们将替换所有默认的写关注选项。我不认为我们已经记录了这一点。
无论如何,“更新”已被弃用,取而代之的是更清晰的 update_one 和 update_many 方法:
>>> from pymongo import WriteConcern
>>> collection = MongoClient().db.collection
>>> coll2 = collection.with_options(
... write_concern=WriteConcern(w=2, wtimeout=6000))
>>> oid = coll2.replace_one({'_id': '11'}, { "_id" : "11", "key": "test" },
upsert=True)
Run Code Online (Sandbox Code Playgroud)
请参阅 PyMongo 3 指南:
此外,我建议您以典型的方式使用 Python 对象,如我的示例:实例化一个对象并在实例上调用一个方法,而不是在类上调用一个方法并将实例作为“self”传递。