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

これを行うには 2 つの方法があります。1 つは、私の知る限り、すべてのオブジェクトを膨張させる Mongoid を使用する方法です。何かのようなもの:

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

DB の負荷では、どちらも同じクエリを生成するため、違いはありません。唯一の違いは、最初のクエリが 2 番目のクエリよりも多くのオブジェクトを作成することです。

于 2013-08-25T00:58:31.790 に答える