gpt4 book ai didi

mongodb - 操作方法 : User has fans

转载 作者:IT老高 更新时间:2023-10-28 13:26:24 25 4
gpt4 key购买 nike

我需要用户能够成为其他用户的粉丝。我应该如何设计/设置它?

我需要能够查看用户粉丝的详细信息。

例如。我有用户:Foo。 Foo 有 3 个粉丝。我希望能够找到 Foo 粉丝的名字。因此:

foo = User.first
foo.name (returns 'Foo')
foo.fans.first.user.name (should return 'bar', since 'bar' is a fan of 'foo')

这就是我目前的设置方式:

User model:
embeds_many :fans
references_many :fans

Fan model:
embedded_in :user, :inverse_of => :fans
referenced_in :user

In console, I do:
User.first.fans.create!(:user => User.first)

我得到: Mongoid::Errors::InvalidCollection: 不允许访问 Fan 的集合,因为它是嵌入文档,请从根文档访问集合。 我认为问题在于,因为风扇模型嵌入在用户模型中,该用户模型也具有对用户模型的自引用....

您的想法将不胜感激。

最佳答案

自引用关联怎么样:

class User
include Mongoid::Document
references_many :fans,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fan_of

references_many :fan_of,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fans
end

# let's say we have users: al, ed, sports_star, movie_star
sports_star.fans << al
movie_star.fans << al
sports_star.fans << ed
movie_star.fans << ed

movie_star.fans # => al, ed
al.fan_of # => sports_star, movie_star

问题是您试图仅使用嵌入文档进行关系关联。当您在 User 中嵌入了 Fan 时,您只能通过其父 User 访问 Fan。您不能执行 Fan.find(some_id) 之类的操作,因为没有 Fan 记录的集合。

最终,MongoDB 将支持允许您执行此操作的虚拟集合。现在,您必须使用关系类型的关联。如果你想在这种情况下使用嵌入文档,你必须创建一些丑陋且低效的自定义方法来搜索父记录。

使用 MongoDB 和 Mongoid,我发现您可以轻松地在嵌入式关联和关系关联之间切换。 SQL 类型的关系和嵌入的关系都有自己的位置,可以一起使用,效果很好。

关于mongodb - 操作方法 : User has fans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4128163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com