Ruby on rails 如何实现';社会';mongoid体

Ruby on rails 如何实现';社会';mongoid体,ruby-on-rails,ruby-on-rails-3,mongoid,self-reference,Ruby On Rails,Ruby On Rails 3,Mongoid,Self Reference,我正试图在我正在制作的网站上创建一个朋友网络。我用的是Mongoid。如何实例化朋友 我假设用户需要与多个其他用户建立关系关联。但以下代码: class User include Mongoid::Document references_many :users, :stored_as=>:array, :inverse_of=> :users end 告诉我有一个无效的查询。我做错了什么?有人对如何获得我想要的东西有什么建议吗?显然,经过大量研究,Mongoid目前无法进行

我正试图在我正在制作的网站上创建一个朋友网络。我用的是Mongoid。如何实例化朋友

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

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

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

显然,经过大量研究,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
类用户
include Mongoid::Document
字段:friends,:type=>Array,:default=>[]
def交朋友(朋友)
添加朋友(朋友)
朋友。添加朋友(自我)
结束
def朋友
ids=读取属性:朋友
ids.map{| id | User.find(id)}
结束
def是你的朋友吗?其他用户
ids=读取属性:朋友
包括哪些?其他用户id
结束
受保护的
def添加朋友(朋友)
当前=读取属性:朋友

当前简而言之,你不能。MongoDB没有联接表的概念,通常也没有联接。Mongoid多对多“模拟”是通过在每一侧存储外键数组来完成的


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

您可以发布一个指向您所看到的问题跟踪或讨论的链接吗?这是偶然的吗?