我想检测一个 MongoDB 副本集是否已经初始化(所以我可以向用户显示一条错误消息,例如“你忘记初始化你的副本集”)。是否可以检测副本集是否已使用 Java Mongodb 驱动程序初始化?我发现的最接近的是com.mongodb.Mongo.getReplicaSetStatus()
- 但我认为这不会告诉我该集合是否未初始化。
5 回答
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
我只能在这里看到旧的答案,但我很惊讶没有人提到这个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
此命令在主节点和辅助节点上都能很好地工作。
如需更多信息,请查看:
这是command()
您正在寻找的功能:
它得到一个字符串参数。
注意:该'getReplicaSetStatus'
命令必须在admin数据库上运行。
http://api.mongodb.org/java/current/com/mongodb/DB.html#command(java.lang.String)
您可以直接检查条件:
if(rs.status())
{
rs.remove()
}
还有另一个 StackOverflow 问题似乎是同一个问题 - 请参阅下面的链接。这样做的方法是获取确实存在的数据库列表 - 从 Java 驱动程序中,您可以在 localhost 上运行的 mongod 服务器上执行类似的操作
Mongo mongo = new Mongo("127.0.0.1", 27017); 列出数据库名称 = mongo.getDatabaseNames();
这相当于 mongo shell “show dbs” 命令。