0

Mongoid 3 を使用して、いくつかの埋め込みドキュメントで 2 つのクエリの交差を取得しようとしています。

だから(偽の例)私が持っていると想像してください:

class Post
  embeds_many :comments

  index 'comments.author_id' => 1
end

class Comments
  embedded_in :post
  belongs_to :author
end

ユーザーからのコメント付きの投稿を取得したい場合は、

Post.where(:'comments.author_id' => User.first.id)

しかし、これらの両方のユーザーによるコメントを含む投稿を取得したい場合はどうすればよいでしょうか:

u1 = User.first.id
u2 = User.last.id
Post.where(:'comments.author_id' => u1.id, :'comments.author_id' => u2.id)

これは mongoid 3 では機能しません。最初の comments.author_id を 2 番目のもので上書きするので、次のようになります。

command={:count=>"posts", :query=>{"comments.author_id"=>"505d1eb5f8182b7082000017"}}

運がなくても試した他のバリエーション:

Post.where(:'comments.author_id' => u1.id).where(:'comments.author_id' => u2.id)
Post.where(:'comments.author_id' => u1.id).and.where(:'comments.author_id' => u2.id)
Post.where(:'comments.author_id' => u1.id).intersect.where(:'comments.author_id' => u2.id)
Post.all_of(:'comments.author_id' => u1.id, :'comments.author_id' => u2.id)

このクエリを構築するより良い方法はありますか? ありがとう!

4

1 に答える 1

1

ここでの問題は、メソッドが実行される前にRubyハッシュを提供したため、この例ではMongoidがそれを使用して何もする機会がないことです。同じ):

Post.where(:'comments.author_id' => u1.id, :'comments.author_id' => u2.id)

あなたがしたいことは次のとおりです。

Post.any_in(:'comments.author_id' => [ u1.id, u2.id ])

于 2012-09-22T15:13:58.710 に答える