我有以下嵌入式结构
class CbAuthor
include Mongoid::Document
embeds_many: cb_bylines
field :name, type: String
end
class CbByline
include Mongoid::Document
embedded_in :cb_author
has_many :cb_articles
field :byline, type: String
end
class CbArticle
include Mongoid::Document
belongs_to :cb_byline
end
这是因为作者发布了许多署名或假名,并且会附加到他们的分析报告中。所以,当我有一个署名时,如何找到作者?这将是必要的,因为他们将有仪表板,应该列出他们在所有各自的署名下写的所有文章。
我尝试了CbAuthor.cb_bylines
,但这给了我一个无方法错误。或CbAuthor.where(cb_bylines["byline"]: bylineInQuestion)
但也会出错。
基本上,我们的目标是让一个作者姓名找到他所有的副标题和与这些副标题相关的文章
答案 0 :(得分:1)
embeds_many :cb_bylines
只是一种奇特的说法"添加一组名为cb_bylines
"的哈希值(至少就存储而言)。这意味着你的CbAuthor
在MongoDB中看起来像这样:
{
_id: '...',
name: '...',
cb_bylines: [
{ _id: '...', byline: '...' },
...
]
}
MongoDB将展开数组以便为您进行简单查询,这样您就可以只查找'cb_bylines.byline'
,就像在查询集合中的哈希一样:
authors_by_lined_as_pancakes = CbAuthor.where('cb_bylines.byline' => 'Pancakes McGee')
或者如果您知道只有一个:
pancakes_mcgee = CbAuthor.find_by('cb_bylines.byline' => 'Pancakes McGee')
不要害怕绕过Rails和Mongoid来查看MongoDB中你的数据真实情况。