我很好奇本机驱动程序没有抱怨我的(未正确配置)副本集。事实上,我的设置只有一个mongod
实例侦听端口27021(端口27018和27019甚至没有使用):
var async = require('async')
, mongodb = require('mongodb')
, Db = mongodb.Db
, Connection = mongodb.Connection
, Server = mongodb.Server
, ReplSetServers = mongodb.ReplSetServers;
async.waterfall([
function (callback) {
var rls = new ReplSetServers([
new Server('localhost', 27017, {}), // Just mongod instance
new Server('localhost', 27018, {}), // Offline
new Server('localhost', 27019, {}), // Offline
]);
new Db('test', rls, { w: 0 }).open(function (err, db) {
callback(err, db);
});
},
], function (err, db) {
if (err) console.error(err);
if (db) db.close();
});
没有错误输出。当然,停止运行mongod
的唯一实例会导致连接错误。我在这里错过了一些明显的东西吗?
答案 0 :(得分:1)
提供给驱动程序的服务器列表用于发现副本集成员。如果驱动程序可以连接到至少一个副本,它将执行rs.isMaster()调用(您可以在shell中尝试此操作),该调用返回活动成员列表。只要执行的操作不违反集合的当前状态(比如在没有主要时尝试写入),那么您将不会看到错误。即使是写入,您也必须要求确认(w:> = 1)才能在客户端上看到错误。