MongoDB C#更改副本集配置

时间:2013-11-22 09:46:01

标签: c# .net mongodb mongodb-.net-driver

我正在使用C#驱动程序来处理MongoDB。我需要使用我的程序在执行期间更新set config,然后允许程序的其他部分继续使用驱动程序。

我目前的问题是重新配置驱动程序以使用新设置。

try
{
    var res = Database.Admin.RunCommand(new CommandDocument("replSetReconfig", replicaSetConfig));
}
catch (EndOfStreamException){}
catch (Exception e)
{
    Log.Exc("Problem updating replica set", e);
    ranCommand = false;
}
if (ranCommand)
{
HERE - I need to update the MongoClient or MongoServer to have the new servers
    return;
}

我假设发生EndOfStreamException时,该命令已成功,因为服务器已关闭/启动了重新配置。

我想更新驱动程序以获得新的配置,以确保它肯定会重新连接到至少一个服务器,在任何边缘情况下,更改配置将阻止它与其原始连接字符串连接回来。

有没有办法实现这个目标?

作为一个额外的问题,有没有办法从C#中确定当前的副本集配置版本?

由于

1 个答案:

答案 0 :(得分:0)

我可以回答您问题的第2部分 - 您可以查询本地数据库以获取当前的副本集配置:

MongoServer server = client.GetServer();
var local = server.GetDatabase("local"); 
var collection = local.GetCollection("system.replset");
var cfg = collection.FindOne(); 
Console.WriteLine(cfg["version"]);

我想如果原始连接字符串不再有效,则需要使用新的连接字符串创建一个新的MongoClient对象。

[后来] 您还可以通过在admin数据库上运行replSetGetStatus命令来获取有关副本集的所有其他信息,包括其状态。