我在mongodb.com上使用所有默认设置创建了一个M0实例。我从“ Atlas连接”对话框中复制了URI连接字符串。在mongoDB Compass中被识别,并自动填写了连接详细信息表单。
它工作了好几个星期,我可以浏览我的文档。然后突然我得到了:
加载导航时发生错误:'not master and slaveOk = false':建议在连接对话框中将读取首选项更改为Primary Preferred或Secondary Preferred,或为完整的拓扑连接提供副本集名称。 / p>
我进行了搜索,大多数人建议明确指定Replica Set Name
。自动设置将Read Preference
设置为“主要”,而Replica Set Name
为空白。
为什么此错误突然发生,如何找到要使用的副本集名称?
答案 0 :(得分:2)
实际上,您可以在Mongo Shell上轻松键入以下内容
rs.status().set
这将为您返回副本集名称
答案 1 :(得分:1)
为什么这个错误突然发生
由于存在一个Replica Set Election,将您要连接的实例的state从Primary更改为Secondary,因此触发了错误消息。
当connecting using MongoDB Compass时,未指定副本集名称。该连接将是与实例的直接连接,而不是与副本集的连接(自动拓扑发现)。
如何找出要使用的副本集名称?
在MongoDB Atlas项目页面上,选择左侧菜单上的Deployment
链接。在Processes
标签下的Topology
视图下,您应该看到副本集名称(这应该是单击Deployment
时显示的默认视图)。
通常,副本集名称是群集名称加-shard-0
。即群集名称test
,副本集名称为test-shard-0
。
答案 2 :(得分:1)
打开mongo shell并键入命令:
rs.status()
这将为您提供一个具有副本集名称的文档(在键set
下):
{
"set" : "Name of your replica set",
...
}
答案 3 :(得分:1)
在mongo shell中-我执行rs.status()并复制了设置名称。 在Compass客户端中,我从左侧选择了以前使用的/“最近”连接字符串,然后单击字符串框上方的“分别填写连接字段”链接。 单击“更多选项”选项卡,然后将集名称粘贴到“副本集名称”字段中(以前是空的) 这为我修复了它,并且可以连接。
答案 4 :(得分:0)
在本地连接到主 mongod 服务器时,您会注意到提示具有副本集名称。示例:
ssh -i "keyfile.pem" MongoDPrimary:27017 (连接到 MongoD 服务器) mongo(连接到 MongoD 数据库)
s0:PRIMARY>(Mongo Shell 提示)
在上面的提示中: “s0”指的是副本集名称 “Primary”是指主副本。
rs.status() 虽然很好,但需要您对可以进行身份验证的 DB 进行身份验证