我在多个环境中部署了相同的软件,有些使用MongoDB副本集,有些使用单个服务器。我使用WriteConcern.WMajority
进行某些更新操作,但如果服务器不是副本集的一部分,则会引发异常。
我正在寻找一种方法来询问服务器它是否是副本集的一部分,因此我将知道使用WriteConcern.WMajority
是否安全。我的尝试是这样的:
string connStr = System.Configuration.ConfigurationManager
.ConnectionStrings["connStrName"].ConnectionString;
var server = new MongoDB.Driver.MongoClient(connStr).GetServer();
bool isReplicaSet = server.GetDatabase("admin")
.RunCommand("replSetGetStatus").Ok;
但这会引发MongoDB.Driver.MongoCommandException: Command 'replSetGetStatus' failed: not running with --replSet (response: { "ok" : 0.0, "errmsg" : "not running with --replSet" })
。抓住这个例外是我最好的选择吗?
答案 0 :(得分:1)
public bool IsPartOfReplicaSet(string connectionString)
{
var result = new MongoClient(connectionString)
.GetServer()
.GetDatabase("admin")
.RunCommand("getCmdLineOpts")
.Response["parsed"] as BsonDocument;
return result.Contains("replSet");
}