我有一个看起来像这样的Mongoid结构:
class Site
has_many :web_pages
field :name, type: String
# ... other stuff
end
class WebPage
belongs_to :site
embeds_one :content
# ... other stuff
end
class Content
embeds_many :images
# ... other stuff
end
class Image
embedded_in :content
field :title, type: String
field :bytes, type: Integer
# ... other stuff
end
我想要做的是有一个Mongoid查询给出一个站点名称,拉出一组图像记录,但只有标题和字节字段。
我知道我可以通过Ruby迭代地执行此操作...即我可以抓取给定站点的所有WebPages(按名称),遍历它们并为每个抓取它的一条内容记录然后全部该内容的图像,仅采用标题和字节字段。但这是一个N + 1查询,而我确信在单个查询中必须有一种方法可以为给定网站的所有网页提取所有图像(按标题)。
我欢迎任何有关如何使用Mongoid进行安排的建议。
答案 0 :(得分:0)
由于我仍然需要迭代多个集合,我提出的最好的是:
def build_image_details(site)
{}.tap do |hash|
pages = WebPage.where(site: site)
images = pages.collect { |page| page.content.images }.flatten
images.each { |image| hash[image.title] = image.bytes }
end # tap
end
该方法返回一个如下所示的哈希:
{
"Some Image Title" => 2346435,
"Another Image Title" => 598438
# etc.
}
我必须查询获取页面,然后查询每个页面以收集图像(通过内容)。但它确实有效。