我想检测MongoDB副本集是否已初始化(因此我可以向用户显示错误消息,例如"您忘记初始化副本集")。是否可以使用Java Mongodb驱动程序检测副本集是否已初始化?我找到的最接近的是com.mongodb.Mongo.getReplicaSetStatus()
- 但我不认为这会告诉我该套装是否未初始化。
答案 0 :(得分:0)
还有另一个StackOverflow问题似乎是同一个问题 - 请参阅下面的链接。 这样做的方法是获取存在的数据库列表 - 从Java驱动程序中,您可以在localhost上运行的mongod服务器上执行此类操作
Mongo mongo = new Mongo(“127.0.0.1”,27017); 列出databaseNames = mongo.getDatabaseNames();
这相当于mongo shell“show dbs”命令。
答案 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
此命令在主节点和辅助节点上均能很好地工作。
有关更多信息,请检查: