【问题标题】:Understanding MongoMappers many relationship了解 MongoMappers 的许多关系
【发布时间】:2011-04-10 16:41:28
【问题描述】:

好的,首先我对 Ruby、Rails、Mongo 甚至 ActiveRecord 不太了解,所以如果这些问题相当基本,我深表歉意。首先,我有一个“事件”模型,并且我在“评论”模型中添加了许多关系。现在,我对 mongo(或任何文档数据库)的(基本)理解是不建议外键查找(或在 mongo 中调用的任何内容),而是选择尽可能多地存储在单个文档中。考虑到这一点,我希望在每个文档中嵌入一个带有评论 JSON/BSON 的事件集合,即

event:

{
 Title: "some event"
 Comments : [
    { user_id: [object id], comment: "comment"}, 
    { user_id: [object id], comment: "other comment"}
 ]
}

相反,我看到创建了一个 cmets 集合以及事件集合。这是否是映射这种关系的正确方法,如果是这样,我如何停止创建评论集合,而是将信息直接嵌入到事件中?我的猜测是我必须告诉我的 Comment 映射没有 _id 属性,因此不属于它自己的集合。


编辑:我发现我在第一个问题中在这里寻找的是使用 MongoMapper::EmbeddedDocument 而不是包括 MongoMapper::Document


其次,我希望用户能够将自己标记为“参加”或只是“感兴趣”一个事件,我认为这将被建模为事件的参考 user_id 数组。所以我最初认为它将被映射为两个“多”关系,但据我所知,我传递给 many 方法的常量的名称用于创建 getter/setter,这对我不起作用如果我有两个相同类型的关系。

换句话说,如果我有这个映射:

class Event
   many :users
end

然后我的理解是,我将为 users 属性生成 getter 和 setter。所以我可以这样做:

event.users << someAttendingUser

这一切都很好,此时我希望存储对用户的引用而不是整个用户 BSON(与上面的 cmets 示例不同强>)。现在的问题是,当我有两个到用户集合的映射时,我该如何做到这一点,就像我需要“参与”和“感兴趣”的用户一样?

所以总结一下这个漫无边际:

  • 有时我想将许多关系直接存储为原始文档中的 BSON,而不是作为对另一个集合中文档的引用。我该怎么做?

  • 有时我想在一个文档中存储许多相同类型的关系,我希望它们成为对另一个集合中文档的引用。我该怎么做?

希望这是有道理的,如果我在这里问显而易见的问题,我深表歉意。


编辑 2:

好的,好吧,在提出这个问题之前我确实进行了搜索,但现在看来我已经找到了我的两个问题的答案,所以我将自己关闭这个问题。

第二部分要求我为映射指定一个类名选项,即

class Event
   many :attendees, :class_name  => "User"
   many :interested, :class_name  => "User"
end

【问题讨论】:

  • 欧文---你应该把答案移到一个答案并自己接受
  • 请按照@JesseWolgamott 所说的去做,这样它就可以从我的提要中消失。试图帮助别人,你的问题不断出现。谢谢!

标签: ruby-on-rails activerecord mongomapper


【解决方案1】:

好的,好吧,在问这个问题之前我确实进行了搜索,但现在看来我已经找到了我的两个问题的答案,所以我将自己关闭这个问题。

第二部分要求我为映射指定一个类名选项,即

class Event
   many :attendees, :class_name  => "User"
   many :interested, :class_name  => "User"
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2011-02-26
    • 2019-03-30
    • 2011-07-24
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多