通过嵌入式文档查找 Mongoid
Mongoid find by embedded document
我有以下嵌入结构
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)
但这也会产生错误。
基本上目标是让一个作者的名字找到他所有的署名以及与这些署名相关的文章
embeds_many :cb_bylines
只是 "add an array of hashes called 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 里面的真实情况。
我有以下嵌入结构
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)
但这也会产生错误。
基本上目标是让一个作者的名字找到他所有的署名以及与这些署名相关的文章
embeds_many :cb_bylines
只是 "add an array of hashes called 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 里面的真实情况。