3

我正在尝试在我正在制作的网站上创建朋友网络。我正在使用 Mongoid。我如何实例化朋友?

我假设用户需要与多个其他用户建立关系关联。但是下面的代码:

class User
  include Mongoid::Document
  references_many :users, :stored_as=>:array, :inverse_of=> :users
end

告诉我我有一个无效的查询。我究竟做错了什么?有人对如何获得我想要的东西有任何建议吗?

4

2 回答 2

3

显然,经过大量研究,Mongoid 目前不具备周期性关联的能力,尽管它被标记为需要修复,并且可能会在未来的版本中修复。我正在使用的当前解决方法如下:

class User
  include Mongoid::Document
  field :friends, :type => Array, :default => []

  def make_friends(friend)
    self.add_friend(friend)
    friend.add_friend(self)
  end

  def friends
    ids = read_attribute :friends
    ids.map { |id|  User.find(id)}
  end

  def is_friends_with? other_user
    ids = read_attribute :friends
    ids.include? other_user.id
  end

protected

  def add_friend(friend)
    current = read_attribute :friends
    current<< friend.id
    write_attribute :friends,current
    save
  end
end
于 2010-09-15T01:56:44.887 回答
0

简短的回答是你不能。MongoDB 没有连接表的概念,也没有一般的连接。Mongoid 多对多“模拟”是通过在每一侧存储外键数组来完成的。

回应评论:MongoDB 是一个文档存储。因此,它适合“文档”高度异构的情况。当您将 Advertisers 存储在 Campains 和 Advertisements 的子树中时,您必须以 ruby​​ 代码收集 Advertisers 的广告。如果您的数据具有非常同质的形式,那么您可以考虑使用关系数据库。我们经常使用 MySQL 来关联对象,然后将 MongoDB 文档添加到对象中,以便它们可扩展。

于 2016-03-03T20:40:36.500 回答