gpt4 book ai didi

mongodb - Pymongo:为集合更新设置 w 会覆盖默认的写关注选项

转载 作者:行者123 更新时间:2023-12-02 04:01:14 27 4
gpt4 key购买 nike

我有一个 pymongo 集合,它的写关注选项如下:

>>> col1.__class__.__bases__
(<class 'pymongo.collection.Collection'>,)
>>> col1.write_concern
{'wtimeout': 6000}

我正在尝试在只有主节点可用(从节点被阻止)的副本集中插入文档

>>> pymongo.collection.Collection.update(col1, {'_id': '11'}, { "_id" : "11", "key": "test" }, upsert=True, fsync=False, w=2)

并且 pymongo 永远挂起。似乎设置 w=2 显式将默认 wtimeout 值覆盖为 0。如果我将 wtimeout=6000 发送到 update,它将按预期抛出异常。我是否遗漏了什么,或者它应该以这种方式工作?

最佳答案

的确,如果您将任何写关注选项传递给“更新”,它们会替换所有 默认的写关注选项。我不认为我们已经记录了这一点。

无论如何,“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)

请参阅 PyMongo 3 指南:

http://api.mongodb.com/python/current/migrate-to-pymongo3.html#the-write-concern-attribute-is-immutable

此外,我建议您以典型方式使用 Python 对象,如我的示例所示:实例化一个对象并调用该实例的方法,而不是调用类的方法并将实例作为“self”传递.

关于mongodb - Pymongo:为集合更新设置 w 会覆盖默认的写关注选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com