使用java驱动程序时,如何检测MongoDB副本集是否未初始化?
我想检测MongoDB副本集是否已经初始化(因此我可以向用户显示一条错误消息,如“您忘记初始化您的副本集”)。是否可以检测副本集是否已使用Java Mongodb驱动程序初始化?我发现的最近的一个问题是使用java驱动程序时,如何检测MongoDB副本集是否未初始化?,mongodb,mongodb-java,Mongodb,Mongodb Java,我想检测MongoDB副本集是否已经初始化(因此我可以向用户显示一条错误消息,如“您忘记初始化您的副本集”)。是否可以检测副本集是否已使用Java Mongodb驱动程序初始化?我发现的最近的一个问题是com.mongodb.Mongo.getReplicaSetStatus()——但我认为这不会告诉我该集合是否未初始化。还有另一个堆栈溢出问题,似乎是同一个问题-请参阅下面的链接。 实现这一点的方法是获取确实存在的数据库列表——从Java驱动程序中,您可以在运行在localhost上的mongo
com.mongodb.Mongo.getReplicaSetStatus()
——但我认为这不会告诉我该集合是否未初始化。还有另一个堆栈溢出问题,似乎是同一个问题-请参阅下面的链接。
实现这一点的方法是获取确实存在的数据库列表——从Java驱动程序中,您可以在运行在localhost上的mongod服务器上执行类似的操作
Mongo Mongo=新Mongo(“127.0.0.1”,27017);
List databaseNames=mongo.getDatabaseNames()
这相当于mongoshell的“showdbs”命令
这是您要查找的命令()
函数:
获取一个字符串参数
注意:'getReplicaSetStatus'
命令必须在管理数据库上运行
您可以直接检查以下情况:
if(rs.status())
{
rs.remove()
}
如果Mongo ReplicaSet未初始化,则返回错误代码“94”
我在这里只能看到旧的答案,但我很惊讶没有人提到
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
该命令在主节点和辅助节点上都能很好地工作
有关详细信息,请检查:
# 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