0

だから私はMongoidを使用していて、それを参照してオブジェクトを返したいと思っています。私が持っているとしましょう:

class User
  include Mongoid::Document
  has_many :pictures
end

class Picture
  include Mongoid::Document
  belongs_to :user
end

問題はこのコードにあります:

users = User.all #goes to the db
users.each do |user|
  pic = user.pictures.first # <--- bad! hitting the db again here
end

では、参照を含むオブジェクト(ユーザー)を返すにはどうすればよいので、dbを再度ヒットする必要はありませんか?

4

1 に答える 1

1

これは通常、ActiveRecordに参加することで行われます。このようなもの:

 User.includes(:pictures).each do |user|

ただし、MongoDBは結合をサポートしていないため、親ドキュメントとその参照ドキュメントを一度に読み込む方法はありません。これが問題になる場合は、ユーザードキュメントに画像を埋め込むことを検討する必要があります(ただし、これにより、パフォーマンスがさらに低下する可能性があります)。

アップデート

Mongoidには、参照されたリレーションを熱心にロードする(「EagerLoading」のページを検索する)方法がありますが、それでも個別のクエリが実行されます。その後のリレーションへのアクセス時にデータベースがヒットすることはありません。

于 2013-01-02T15:17:34.827 に答える