我正在通过MongoDB驱动程序为Golang创建一个匹配系统。
我有一个叫做sessions
的收藏。
当用户尝试加入一个匹配时,find()
查询将返回活动会话,然后用户将被置于其中一个活动会话中。
但是,如果同时通过updateOne()
关闭了其中一个会话,那么来自find()
的文档将不再有效。
因此,我想在集合中的所有查询被阻止,直到更新完成。
我知道我可以为这种情况实现自己的互斥锁。但我想知道MongoDB是否也有任何API?如果没有,有任何例子可以说明我如何实现这一点(无论是sync.Mutex
还是sync.RWMutex
)?
1条答案
按热度按时间iaqfqrcu1#
MongoDB是ACID compliant,所以它应该负责决定返回什么文档,即使有一个插入正在进行中。如果你确实认为你的查询没有返回你想要插入的文档,那么你需要在Go端解决这个问题。
使用通道来管理你的控制流。沿着以下方式:
将其 Package 在单个goroutine中,以确保数据库操作按顺序进行。