我一直试图找到一个理想的方法来跟踪mongoid并找到了这个。 HABTM mongoid following/follower
出于某种原因,我不确定这是多么优秀,这篇文章可以追溯到2011年。
如果以这种方式实现,则追随者和以下ID将保留在数组中。这很好,对于少量粉丝来说可能很快。但是想象一下,如果有成千上万的追随者,如果你每次都在搜索数组中的一个项目,那么通过数组可能不是最快的方法。
基于此教程链接,http://ruby.railstutorial.org/chapters/following-users 建议将以下内容放入关系表中,当您只需要检查关系时,可以快速查找。
我的问题是下面的代码非常适合于mongoid优化?我需要一些专家建议,当有大量粉丝时,你们是如何处理关系的。
感谢。
class User
include Mongoid::Document
field :name, type: String
has_and_belongs_to_many :following, class_name: 'User', inverse_of: :followers, autosave: true
has_and_belongs_to_many :followers, class_name: 'User', inverse_of: :following
def follow!(user)
if self.id != user.id && !self.following.include?(user)
self.following << user
end
end
def unfollow!(user)
self.following.delete(user)
end
end
答案 0 :(得分:0)
您可以创建一个实际的Follow
模型(因此将保留在自己的集合中),如下所示:
class Follow
include Mondoid::Document
belongs_to :user
belongs_to :followed_user, class_name: 'User'
end
class User
include Mongoid::Document
field :name, type: String
has_many :follows
def follow!(user)
follows.create(followed_user: user)
end
def unfollow!(user)
follows.where(followed_user_id: user.id).destroy
end
end
答案 1 :(得分:0)
为完整性添加了依赖于用户销毁:
class Follow
include Mondoid::Document
belongs_to :user
belongs_to :followed_user, class_name: 'User'
end
class User
include Mongoid::Document
field :name, type: String
has_many :follows, :dependent => :destroy
def follow!(user)
follows.create(followed_user: user)
end
def unfollow!(user)
follows.where(followed_user_id: user.id).destroy
end
端