mgo连接mongoDB,如何保证应答式写入?

所谓应答式写入,即写入数据库时会等待数据库响应(成功?失败?错误信息?),然后才会继续执行。这对于关键数据的存储很重要。

非应答式写入则不需要等待数据库响应,直接向下执行。

用mgo操作mongoDB时,如果使用

mgo.Dial(127.0.0.1:27017)

则无法保证写入是否为应答式。根据mongoDB相关资料,需要指定参数,并给出例子

mongodb://127.0.0.1:27017/?safe=true;w=1

可我采用

mgo.Dial(127.0.0.1:27017/?safe=true;w=1)

一执行,整个程序直接Panic....

看了下源码,不得要领,好像里面没有相应的配置信息啊……

还请前辈高人帮忙解答下。。

PS:mongoDB版本为 2.6.4 x64

共 5 个回复


captain

什么应答式你的意思不就是阻塞等数据库返回吗?本来就是这样啊,难道变异步了?

# 0

16779242

mongoDB默认是不等数据库返回,就直接下一层操作……也就是非应答式写入……

# 1

16779242

找到了,mgo里有个EnableSafe函数。在session里指定

session.EnsureSafe(&mgo.Safe{W: 1})

即可。

自己回答自己,主要是给未来遇见相同问题的筒子们留点东西。

# 2

jimmykuu

嗯,分享精神,这也是我认为社区比QQ群好的地方,可以留存下来。

# 3

rejoicelee

不错,mark一下,备用

# 4