我正在尝试在我正在制作的网站上创建朋友网络。我正在使用 Mongoid。我如何实例化朋友?
我假设用户需要与多个其他用户建立关系关联。但是下面的代码:
class User
include Mongoid::Document
references_many :users, :stored_as=>:array, :inverse_of=> :users
end
告诉我我有一个无效的查询。我究竟做错了什么?有人对如何获得我想要的东西有任何建议吗?
我正在尝试在我正在制作的网站上创建朋友网络。我正在使用 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
简短的回答是你不能。MongoDB 没有连接表的概念,也没有一般的连接。Mongoid 多对多“模拟”是通过在每一侧存储外键数组来完成的。
回应评论:MongoDB 是一个文档存储。因此,它适合“文档”高度异构的情况。当您将 Advertisers 存储在 Campains 和 Advertisements 的子树中时,您必须以 ruby 代码收集 Advertisers 的广告。如果您的数据具有非常同质的形式,那么您可以考虑使用关系数据库。我们经常使用 MySQL 来关联对象,然后将 MongoDB 文档添加到对象中,以便它们可扩展。