1

我在多个环境中部署了相同的软件,有些使用 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" }). 捕捉这个异常是我最好的选择吗?

4

1 回答 1

2
public bool IsPartOfReplicaSet(string connectionString)
{
    var result = new MongoClient(connectionString)
        .GetServer()
        .GetDatabase("admin")
        .RunCommand("getCmdLineOpts")
        .Response["parsed"] as BsonDocument;

    return result.Contains("replSet");
}
于 2013-11-13T19:30:59.947 回答