官网如下:Connection String URI Format — MongoDB Manual
用过mongo的同学对于对于mongodb的标准uri应该不会陌生,格式如下:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
举几个例子:
(1)没有设置用户名密码的时:
mongodb://11.XXX.6.XXX:27017
(2)用户名为"mongouser",密码为“mypasswd”时
mongodb://mongouser:mypasswd@11.XXX.6.XXX:27017
问题一:通常我们设置密码的时候都会加上一些特殊字符(更具普适性),例如密码是“abc@123”。这个时候你就发现无论如何你也连接不上mongodb数据库了。
#注:如下这样是不行的
mongodb://mongouser:abc@123@11.XXX.6.XXX:27017
解决方案:
作为后台开发对于这种特殊字符引发的问题遇到也不是一次两次了,处理方式无非就是encode、decode。这里也不例外。
字符"@"的url编码是%40;字符":"的url编码是%3a。我们把上面用户名or密码中出现的特殊字符转换成编码字符就可以了。如下就是ok的
mongodb://mongouser:abc%40123@11.XXX.6.XXX:27017
其实官网也有对这种情况作出说明。当用户名或者密码中包含如下特殊字符的时候必须要转换成“percent encoding”。
: / ? # [ ] @
问题二:如何配置读策略
对于分布式数据库(多节点),更好的实现数据隔离、以及数据读策略的多样化。
readPreference 主要控制客户端driver从赋值即的那个节点读取数据,这个特性可以方便的配置读写分离、就近去读等策略。各个配置的含义如下:
(1)primary:只主(默认模式)。只从primary节点读数据。
(2)primaryPreferred:先主后从。优先从primary读取,primary不可服务时从secondary读。
(3)secondary:只从。在建瓯吃泡面个secondary节点读数据。
(4)secondaryPreferred:先从后主。优先从secondary读取,没有secondary成员时从primary读取。
(5)nearest:就近。根据网络距离,就近读取,根据客户端与服务端的PingTime是实现。
参照如下官网链接:Connection String URI Format — MongoDB Manual
标准uri格式如下:
mongodb://mongouser:qiyeqq%40mongo@11.222.6.220:27017/?readPreference=secondaryPreferred
这里贴一个urlencode的网址:UrlEncode编码/UrlDecode解码 - 站长工具