如何动态确定 mongo 写关注

How to dynamically determine mongo write concern

我正在使用 mongoose 连接到 mongo 数据库:

var options = {
    db: {
        w: 2, /* replica acknowledged */
        readPreference: 'nearest'
    }
}

mongoose.connect('mongodb://localhost:27017/some_db', options);

在我的开发环境中,这个 mongodb 不会被复制,这会导致当写入问题设置为 2 时发生错误:

cannot use 'w' > 1 when a host is not replicated

但是在生产中它会被复制所以我需要这个设置。我想我需要一种方法来确定我连接的 mongo 是否被复制,如果是,则将写入关注设置为 2(如上)。

我可以使用的一个解决方案是节点驱动程序 replSetGetStatus,然后检查返回的错误是否表明 mongo 未被复制。

虽然感觉很脏,有没有更好的方法来解决这个问题?

您应该根据您的应用是 运行 处于开发模式还是生产模式,在您的 process.env 中设置一个变量,如果它等于 'production',则将 write concern 设置为 2 ], 否则默认为 1.

var options = {
    db: {
        w: process.env.NODE_ENV === 'production' && 2 || 1,
        readPreference: 'nearest'
    }
}

mongoose.connect('mongodb://localhost:27017/some_db', options);