【问题标题】:MongoDB Schema Design --- Friendship with groupsMongoDB Schema Design --- 与团体的友谊
【发布时间】:2011-08-10 10:38:10
【问题描述】:

朋友们好~ 我想使用 MongoDB 来实现基于组的友谊模型。就像 Google Buzz 一样。 例如,
我的名字是汤姆,史蒂夫和加文是我的朋友。史蒂夫是我的同学和同事,加文是我的同事。

汤姆 -小组同学 史蒂夫 -集团同事 史蒂夫 加文

我的问题是如何设计这个架构?
在 Rails 和 Mongoid 中,我编写了以下代码:

这里是 user.rb

类用户 包括 Mongoid::Document 字段:用户名 字段:电子邮件 字段 :block_list, :type => Array, :default => [] 键:用户名 embeds_many:组 embeds_many :pending_requests has_and_belongs_to_many :friends, :class_name => "用户" 结尾

group.rb

班组 包括 Mongoid::Document 嵌入:用户 字段:名称 字段:成员,:类型 => 数组,:默认 => [] 结尾

pending_request.rb

类 PendingRequest 包括 Mongoid::Document 嵌入:用户 字段:用户名 领域:身体 结尾

有什么建议吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails mongodb schema social-networking mongoid


    【解决方案1】:

    您可以通过多种方式为此目的设计架构。要问的一个重要问题是:如果 Tom 说 Gavin 是同事,这是否意味着 Gavin 也会将 Tom 显示为同事?

    是的: 如果 Tom 或 Gavin 中的任何一个都可以在他们两个之间创建一个链接,并且无论哪种方式都是相同的链接(无论创建该链接的过程如何),那么您真正在谈论的是一种关系。 Mongo 是一个 NoSql 数据库,不进行连接,因此您必须使用多个选择和更新查询来管理这种关系。 Tom 可以保留一份同事列表,而 Gavin 可以保留一份同事列表,并且任何时候他们中的任何一个添加另一个,这两个文档都需要更新。老实说,这种关系是关系数据库擅长的。 Mongo 可能不是最好的解决方案。

    : 如果 Tom 可以完全独立于 Gavin 的想法来确定 Gavin 是否是同事,那么您应该在您的用户集合中存储一组同事。同学们也是一样。每个用户文档都会有一个姓名字段、一个同事字段、一个同学字段等。要获取汤姆的信息,您只需从一个集合中拉出一个文档即可。

    请记住,跟踪文档之间的关系并不是 Mongo 的强项。如果您要处理的关系很多且文档相对较小,那么 Mongo 确实不是您的最佳选择。

    使用mySql管理用户和关系,同时在Mongo中存储活动日志、cmets、posts等没有什么问题。

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 2019-08-19
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2015-07-01
      • 2023-03-14
      相关资源
      最近更新 更多