了解MongoMappers的很多关系

Owe*_*wen 11 activerecord ruby-on-rails mongomapper

好的,首先我不知道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"}
 ]
}
Run Code Online (Sandbox Code Playgroud)

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


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


其次,我希望用户能够将自己标记为"参与"或仅仅"感兴趣"一个事件,我假设该事件将被建模为事件上的参考user_id的数组.所以我最初认为它将被映射为两个"很多"关系,但据我所知,我传递给常量的常量的名称用于创建getter/setter,这对我来说不起作用如果我有两个相同类型的关系.

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

class Event
   many :users
end
Run Code Online (Sandbox Code Playgroud)

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

event.users << someAttendingUser

这是所有的好,在这个时间点我想参考用户存储,而不是整个用户BSON(不像上述意见例子).现在的问题是,当我对用户集合进行两次多次映射时,我该如何做到这一点,因为我需要"参与"和"感兴趣"的用户?

所以总结这漫无边际:

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

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

希望这是有道理的,如果我在这里问明显,我道歉.


编辑2:

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

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

class Event
   many :attendees, :class_name  => "User"
   many :interested, :class_name  => "User"
end
Run Code Online (Sandbox Code Playgroud)

Owe*_*wen 2

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

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

class Event
   many :attendees, :class_name  => "User"
   many :interested, :class_name  => "User"
end
Run Code Online (Sandbox Code Playgroud)