mongodb - mongoDb 连接字符串中的 +srv 是什么意思
问题描述
我是 MongoDB 新手,刚刚遇到两种类型的连接字符串。
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb+srv://[username:password@]host[/[database][?options]]
我知道第一个。但是对第2个中的(+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 的情况下,它会引发错误。
解决方案
在 MongoDB 3.6 中引入了使用 DNS 记录指定的种子列表的概念,特别是SRV和TXT记录。您会回忆起在 MongoDB 中使用副本集时,客户端在连接时必须指定至少一个副本集成员(并且可以指定其中的几个)。即使客户端指定的节点之一不可用,这也允许客户端连接到副本集
您可以在 2.2.12 或更高版本的连接字符串上看到此 URL 的示例
请注意,如果没有 SRV 记录配置,我们必须列出几个节点(在 Atlas 的情况下,我们总是包括所有集群成员,但这不是必需的)。我们还必须指定 ssl 和 replicaSet 选项
对于 3.4 或更早的驱动程序,我们必须使用MongoDB URI 语法在命令行上指定所有选项。
SRV 记录的使用消除了每个客户端为集群传递完整的状态信息集的要求。相反,单个 SRV 记录标识与集群关联的所有节点(及其端口号),关联的 TXT 记录定义 URI 的选项。
检查参考
推荐阅读
- apache-spark - 在 Spark 数据帧中连续编号重复项而不进行随机播放
- javascript - 输入搜索在 JS 中被阻止
- java - 逆时针旋转矩阵 M*N 的每个环
- python - 在一秒钟内打印 40 条消息。打印件必须在一秒钟内均匀分布
- docker - 无法在 Windows 10 上的本地 Docker 中使用弹性搜索
- iteration - 遍历列表列表,每个列表包含 2 个项目
- ruby - 如何引发异常,将其作为参数发送给另一个方法,并在另一个方法中挽救异常?
- iframe - 使用 Svelte 访问 iframe 内容
- mysql - 在 SSMS 中创建链接服务器到远程服务器上的 MySQL 数据库
- css - 图标显示为正方形而不是图标图像