2010-12-06 4 views
3

によって問い合わせは、私はこのようになります広告という名前のモデルがありますか? Ad.where('category.domain_id' => domain.id)を使用しようとしましたが、これは機能しません。Mongoid参照文書

答えて

6

問題はMongoDBがCategoryレコードをAdレコードにマッピングする方法がないことです。それはAdレコードがcategory_idフィールドを持つので、'category.domain_id'は常に何も返しません。クエリ内のドット表記法は、参照(MongoDBでは依然として2番目の市民である)ではなく、埋め込みドキュメントに対してのみ機能します。 (...サブサブサブサブサブ含む)

category_ids = Category.where(:domain_id => domain.id).map(&:_id) 
Ad.where(:category_id.in => category_ids) 
+0

はい、私はまた、カテゴリのすべてのサブカテゴリを取得する必要があります:

だからあなたの問題を解決するために、あなたは2つのクエリが必要です。 MapReduceを使って実装しました(idsコレクションを再帰関数で使用しようとした後)。 –

関連する問題