2

我想检测一个 MongoDB 副本集是否已经初始化(所以我可以向用户显示一条错误消息,例如“你忘记初始化你的副本集”)。是否可以检测副本集是否已使用 Java Mongodb 驱动程序初始化?我发现的最接近的是com.mongodb.Mongo.getReplicaSetStatus()- 但我认为这不会告诉我该集合是否未初始化。

4

5 回答 5

2

If Mongo ReplicaSet is not initilized rs.status() return error code "94" https://github.com/mongodb/mongo/blob/master/src/mongo/base/error_codes.yml

init_status=$(mongo --quiet -u ${MONGO_ADMIN_USER} -p ${MONGO_ADMIN_PASSWORD} --authenticationDatabase admin --eval "rs.status().code" admin)
if [ "${init_status}" = "94" ]; then
    echo "Mongo ReplicaSet is not initialized"
fi
于 2019-11-12T23:56:19.673 回答
1

我只能在这里看到旧的答案,但我很惊讶没有人提到这个ok属性。该rs.status()命令在成功和失败的响应中都包含此属性。该ok属性设置为何时1初始化副本集,0何时未初始化。

例子:

# When Replica Set is initialized
$ mongo --quiet --port 27017 --username your-user --password your-pass --eval 'rs.status().ok'
1

# When Replica Set is NOT initialized
$ mongo --quiet --port 27017 --username your-user --password your-pass --eval 'rs.status().ok'
0

此命令在主节点和辅助节点上都能很好地工作。

如需更多信息,请查看:

于 2020-10-06T22:39:14.840 回答
0

这是command()您正在寻找的功能:

它得到一个字符串参数。

注意:该'getReplicaSetStatus'命令必须在admin数据库上运行。

http://api.mongodb.org/java/current/com/mongodb/DB.html#command(java.lang.String)

于 2012-09-13T16:02:47.217 回答
0

您可以直接检查条件:

if(rs.status()) 
{ 
    rs.remove() 
}  
于 2015-01-16T10:39:29.730 回答
-1

还有另一个 StackOverflow 问题似乎是同一个问题 - 请参阅下面的链接。这样做的方法是获取确实存在的数据库列表 - 从 Java 驱动程序中,您可以在 localhost 上运行的 mongod 服务器上执行类似的操作

Mongo mongo = new Mongo("127.0.0.1", 27017); 列出数据库名称 = mongo.getDatabaseNames();

这相当于 mongo shell “show dbs” 命令。

检查mongodb数据库是否存在?

于 2012-08-09T17:13:53.210 回答