3.MongoDB uri中包含特殊字符与读策略配置

官网如下: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解码 - 站长工具

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焱齿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值