您如何诊断 Mongo 中的 write_concern 问题?

How do you diagnose write_concern problems in Mongo?

我有一个带有辅助数据库的 Mongo 数据库 (v2.4.10) 设置,我正在将数据保存到其中。有时,在保存新文档并尝试检索它后,我会收到未找到该文档的异常,即使在手动检查时它就在那里。

这是一个最小的例子,但不幸的是,问题并没有始终如一地重现。我怀疑问题是由于在辅助节点拥有数据副本之前尝试从数据库中读取造成的?

from mongoengine import connect, Document

class User(Document):
    date_creation = DateTimeField(default=datetime.datetime.utcnow)
    username = StringField(required=True, unique=True)

user = User()
user.username = 'nick'
user.save()

user = User.objects.get(username='nick') # exception thrown here matching User not found
user.username = 'changed'
user.save()

有没有办法诊断这是否属实?那么我应该只调用 user.save(write_concern={'w':0})

推荐的解决方案是什么?

使用save(..., write_concern={w: 2, fsync: True}, ...) 作为 mongoengine 默认写关注是 None.