我正在使用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#中确定当前的副本集配置版本?
由于
答案 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命令来获取有关副本集的所有其他信息,包括其状态。