MongoDB在find()之前等待updateOne()完成

lb3vh1jj  于 2023-03-27  发布在  Go
关注(0)|答案(1)|浏览(128)

我正在通过MongoDB驱动程序为Golang创建一个匹配系统。
我有一个叫做sessions的收藏。
当用户尝试加入一个匹配时,find()查询将返回活动会话,然后用户将被置于其中一个活动会话中。
但是,如果同时通过updateOne()关闭了其中一个会话,那么来自find()的文档将不再有效。
因此,我想在集合中的所有查询被阻止,直到更新完成。
我知道我可以为这种情况实现自己的互斥锁。但我想知道MongoDB是否也有任何API?如果没有,有任何例子可以说明我如何实现这一点(无论是sync.Mutex还是sync.RWMutex)?

iaqfqrcu

iaqfqrcu1#

MongoDB是ACID compliant,所以它应该负责决定返回什么文档,即使有一个插入正在进行中。如果你确实认为你的查询没有返回你想要插入的文档,那么你需要在Go端解决这个问题。
使用通道来管理你的控制流。沿着以下方式:

select {
case query := <-queryChan:
  // do mongo query, make sure to include a return channel in the query struct so you can collect your results
  query.results <- // the results
case insert := <-insertChan
  // do mongo insert
}

将其 Package 在单个goroutine中,以确保数据库操作按顺序进行。

相关问题