我是MongoDB的新手,刚刚遇到两种类型的连接字符串。
- mongodb://[用户名:密码@]主机1 [:端口1][,主机2 [:端口2],...[,主机N [:端口N]]][/[数据库][?选项]]
- mongodb+srv://[用户名:密码@]主机[/[数据库][?选项]]
我知道第一个。但是不熟悉第二个中的(+srv)。
let connectionUrl;
if (username && password)
connectionUrl = `mongodb://${username}:${password}@${host}:${
port || 27017
}/${databaseName}`;
else
connectionUrl = `mongodb://${host}:${
port || 27017
}/${databaseName}`;
console.log(connectionUrl, "connectionUrlconnectionUrl");
let connection = await mongoose.createConnection(connectionUrl, {
useNewUrlParser: true,
});
return connection;
现在,问题用户可以输入用户名、密码、主机名等...
但是有没有办法知道什么时候添加***(+srv)***,因为我尝试使用localhost和MongoDB atlas,Atlas使用+srv很好,但是在localhost的情况下,它抛出了一个错误。
4条答案
按热度按时间osh3o9ms1#
如果您想知道如何自己获取详细信息,假设您的主机是foo.example.com
euoag5mw2#
以上所有答案都在mongo conn字符串的上下文中正确指定了SRV和TXT记录!!只是想添加,如果我们需要查看这些SRV或TXT记录,我们可以使用以下命令(Windws cmd我已经使用):
对于SRV记录:
nslookup -q=SRV _mongodb._tcp.cluster0.9gztv.mongodb.net
上面的命令会给予你的结果像
你可以看到svr hostname字段有3个不同的服务器名,它们都是副本集的一部分。重要的是添加_mongodb._tcp作为前缀。
类似地,
nslookup -q=TXT cluster0.9gztv.mongodb.net
将给予如下结果。因此,驱动程序查询SRV记录以查找连接字符串中的主机名,然后查询TXT记录,并将它们组合起来以连接到群集。
http://pauldone.blogspot.com/2019/12/tips-for-atlas-connectivity.html
q3aa05253#
在MongoDB3.6中引入了使用DNS记录指定的种子列表的概念,特别是SRV和TXT记录。您还记得在MongoDB中使用副本集时,客户端必须指定至少一个副本集成员(并且可以指定其中的几个)。这样,即使客户端指定的某个节点不可用,客户端也可以连接到复本集
您可以在2.2.12或更高版本的连接字符串中看到此URL的示例
注意,如果没有SRV记录配置,我们必须列出几个节点(在Atlas的情况下,我们总是包括所有集群成员,尽管这不是必需的)。
对于3.4或更早版本的驱动程序,我们必须使用MongoDB URI syntax在命令行上指定所有选项。
SRV记录的使用消除了每个客户机传递群集的完整状态信息集的要求。相反,单个SRV记录标识与群集关联的所有节点(及其端口号),关联的TXT记录定义URI的选项。
检查**Reference**
tvokkenx4#
在MongoDB 3.6中,他们引入了种子列表的概念,种子列表是使用DNS记录(特别是SRV和TXT记录)指定的。
这样,即使客户端指定的节点之一不可用,客户端也可以连接到副本集。