为什么MongoDB Node.js驱动程序不会抱怨错误的副本集?

时间:2013-05-17 12:13:42

标签: node.js mongodb database-replication

我很好奇本机驱动程序没有抱怨我的(未正确配置)副本集。事实上,我的设置只有一个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的唯一实例会导致连接错误。我在这里错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

提供给驱动程序的服务器列表用于发现副本集成员。如果驱动程序可以连接到至少一个副本,它将执行rs.isMaster()调用(您可以在shell中尝试此操作),该调用返回活动成员列表。只要执行的操作不违反集合的当前状态(比如在没有主要时尝试写入),那么您将不会看到错误。即使是写入,您也必须要求确认(w:> = 1)才能在客户端上看到错误。