如何动态确定 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);
我正在使用 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);