我正在开发一个 Rails 应用程序,它实现了一些社交网络功能,如关系、关注等。到目前为止,一切都很好,直到我遇到了多对多关系的问题。如您所知,mongo 缺少连接,因此推荐的解决方法是将关系存储为两个相关文档上的 id 数组。好的,这有点多余,但它应该可以工作,让我们说:
field :followers, type: Array, default: []
field :following, type: Array, default: []
def follow!(who)
self.followers << who.id
who.following << self.id
self.save
who.save
end
这工作得很好,但这是我们需要事务的情况之一,呃,但 mongo 不支持事务。如果 id 被添加到 'followed' 关注者列表而不是 'follower' 关注列表中怎么办?我的意思是,如果第一个文档被正确修改,但第二个文档由于某种原因无法更新。
可能是我太悲观了,但没有更好的解决方案?