覆盖 Labix mgo 中的默认 writeConcern

我labix mgo在 Go 应用程序中用作 mongodb 驱动程序,我想知道是否有办法覆盖writeConcern特定查询的默认值。


关于配置的几句话:副本集有三个节点 - 一个主节点和两个辅助节点,writeConcern和readPreference是默认的。驱动程序使用monotonic一致性,这意味着所有读取都是从辅助节点完成的(当它可用时,否则 - 从主节点)。


在某些情况下,我需要在写入数据库后立即读取更新的数据 - 由于上述 mongo 可能会返回旧数据:


// update some data

_ := collection.Update(bson.M{"_id": "some_id"}, bson.M{"key": "value"})


// the data is still not updated when I read it immediately after update

var obj interface{}

_ := collection.Find(bson.M{"_id": "some_id"}).One(&obj)

问题是:是否可以覆盖默认值writeConcern(或consistency驱动程序的默认值)并强制驱动程序等待数据写入辅助节点或从主节点读取某些查询?


白衣非少年
浏览 146回答 1
1回答

牧羊人nacy

好的,经过一些研究,我最终找到了解决方案。有一种方法SetMode可以让您更改特定数据库会话的默认一致性模式。在我们的应用程序中,我们每次在发出请求之前创建主会话的副本,然后在完成后关闭它:// master session is configured to use monotonic consistencysession := masterSession.Copy()// tell mgo to read from the primary in this sessionsession.SetMode(mgo.Strong, true)collection := session.DB("db").C("collection")var obj interface{}// now we can be sure that the following request reads the data from the primary_ := collection.Find(bson.M{"_id": "some_id"}).One(&obj)session.Close()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go