3

假设我们有这些模型:

class Person
  include Mongoid::Document

  embeds_many :albums
end

class Album
  include Mongoid::Document

  embeds_many :photos
end

class Photo
  include Mongoid::Document
end

我想要的是检索所有Photo特定的Person. 是否有 mongoid/mongodb 快捷方式,或者唯一的方法是迭代person.albums并将所有内容存储album.photos在一个新数组中?

谢谢。

4

1 回答 1

4

您有两种方法可以做到这一点,一种是通过 Mongoid,AFAIK 会为所有对象充气。就像是:

Person.only("albums.photos").where(id: '1').albums.map(&:photos).flatten

或者您可以在 Moped(driver) 中执行此操作,它将仅返回一组照片。

Person.collection.find(id: "1").select("albums.photos" => 1).
first["albums"].map { |a| a["photos"] }.flatten

在数据库负载上,两者都没有任何区别,因为它们会产生相同的查询,唯一的区别是第一个将创建比第二个更多的对象。

于 2013-08-25T00:58:31.790 回答