Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java驱动程序时,如何检测MongoDB副本集是否未初始化?_Mongodb_Mongodb Java - Fatal编程技术网

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

使用java驱动程序时,如何检测MongoDB副本集是否未初始化?,mongodb,mongodb-java,Mongodb,Mongodb Java,我想检测MongoDB副本集是否已经初始化(因此我可以向用户显示一条错误消息,如“您忘记初始化您的副本集”)。是否可以检测副本集是否已使用Java Mongodb驱动程序初始化?我发现的最近的一个问题是com.mongodb.Mongo.getReplicaSetStatus()——但我认为这不会告诉我该集合是否未初始化。还有另一个堆栈溢出问题,似乎是同一个问题-请参阅下面的链接。 实现这一点的方法是获取确实存在的数据库列表——从Java驱动程序中,您可以在运行在localhost上的mongo

我想检测MongoDB副本集是否已经初始化(因此我可以向用户显示一条错误消息,如“您忘记初始化您的副本集”)。是否可以检测副本集是否已使用Java Mongodb驱动程序初始化?我发现的最近的一个问题是
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
该命令在主节点和辅助节点上都能很好地工作

有关详细信息,请检查:


谢谢。但我不太确定我是否遵循了这一点;如果复制集已初始化且未初始化,“getDatabaseNames()”将返回什么?您可以展开一点吗?这甚至与提问者无关。status()。如果用户未经授权(即您提供了错误的凭据),ok也将返回0,因此它不是很安全。另一方面,rs.status().code在此场景中将返回错误代码“13”。rs.status()。如果要检查init状态,则代码更安全。
# 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