3 回答

TA贡献1827条经验 获得超8个赞
27017:docdb-2019-07-30-09-40-47.cluster-cffrhwfhhfof.us-east-2.docdb.amazonaws.com:27017
URI 显示这是 AWS DocumentDB,而不是 MongoDB。DocumentDB 不基于 MongoDB 服务器。相反,它模拟MongoDB API,并在 Amazon 的 Aurora 后端平台之上运行。
如果您打算使用 DocumentDB,而不是使用MongoDB 官方 Go 驱动程序,请参阅SDK for Go:docdb,因为两者之间存在差异和兼容性问题:
根据您的用例,请参阅MongoDB Atlas
错误:超出上下文期限
此错误消息表明,给定上下文指定的时间量,它无法连接。造成这种情况的原因有很多,可能有:
客户端计算机与 DocumentDB 集群位于不同的 VPC 上
集群的安全组不允许入站连接 27017
客户端计算机与 DocumentDB 集群位于不同的区域
另请参阅DocumentDB 疑难解答

TA贡献1804条经验 获得超2个赞
创建 options.ClientOptions 时,调用方法的顺序很重要。以后的 Set* 方法将覆盖以前 Set* 方法调用的值。这包括 ApplyURI 方法。这允许调用者确定选项应用的优先顺序。例如,如果在 SetAuth 之前调用 ApplyURI,则来自 SetAuth 的凭据将覆盖连接字符串中的值。如果在 SetAuth 之后调用 ApplyURI,则其值将覆盖来自 SetAuth 的值。
opts 参数使用 options.MergeClientOptions 处理,会覆盖之前选项的整个选项字段,不会部分覆盖。例如,如果在第一个选项的 Auth 字段中设置了用户名,并且为第二个选项设置了密码,但没有用户名,则合并后用户名字段将为空。
您基本上覆盖了您为实例ApplyURI
设置的所有先前选项。options.ClientOptions
尝试像这样更改顺序:
client := options.Client().
ApplyURI(uri).
SetReadPreference(readpref.SecondaryPreferred()).
SetAppName("catalog").
SetMaxConnIdleTime(time.Microsecond * 100000).
SetAuth(options.Credential{
Username: mongoConf.Username,
Password: mongoConf.Password,
})
希望能帮助到你。

TA贡献1780条经验 获得超4个赞
以下是一些可能的问题
端口问题
您需要检查端口是否打开,并允许从任何地方进行连接。如果您使用的是 Linux(Ubuntu),请检查防火墙设置sudo ufw status verbose
。如果防火墙被禁用,那就没问题了。VM 端口访问
还允许 VM 级别的端口。如果您使用的是 Amazon Lightsail,则必须明确允许该端口授予远程客户端访问权限以建立连接。
Docker 容器
如果您的应用程序和 MongoDB 作为 Docker 容器部署到远程服务器并且您无法与 DB 建立连接,那么可能的解决方案是Docker Network。创建自己的 Docker 网络
创建 MongoDB 容器和名称容器,例如
mongodb
将 MongoDB 添加到您的网络
将 Web 应用程序添加到您的网络
尝试通过容器名称使用 Web 应用程序连接到 MongoDB 容器。
// Set client options clientOptions := options.Client().ApplyURI("mongodb://mongodb:27017") clientOptions = clientOptions.SetMaxPoolSize(100)
- 3 回答
- 0 关注
- 156 浏览
添加回答
举报