在使用java驱动程序时,如何检测MongoDB副本集是否未初始化?

时间:2012-08-09 14:35:29

标签: mongodb mongodb-java

我想检测MongoDB副本集是否已初始化(因此我可以向用户显示错误消息,例如"您忘记初始化副本集")。是否可以使用Java Mongodb驱动程序检测副本集是否已初始化?我找到的最接近的是com.mongodb.Mongo.getReplicaSetStatus() - 但我不认为这会告诉我该套装是否未初始化。

5 个答案:

答案 0 :(得分:0)

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

Mongo mongo = new Mongo(“127.0.0.1”,27017); 列出databaseNames = mongo.getDatabaseNames();

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

Check if mongodb database exists?

答案 1 :(得分:0)

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

获取String参数。

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

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

答案 2 :(得分:0)

你可以直接检查条件:

if(rs.status()) 
{ 
    rs.remove() 
}  

答案 3 :(得分:0)

如果未初始化Mongo ReplicaSet,则rs.status()返回错误代码“ 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

答案 4 :(得分:0)

我在这里只能看到旧的答案,但是令我惊讶的是,没有人提到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

示例:

X

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

有关更多信息,请检查: