我正在尝试使用 Mongoid 3 在一些嵌入式文档上获取两个查询的交集。
所以(假例子)想象我有:
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 覆盖第一个comments.author_id,所以你会得到这样的结果:
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)
有没有更好的方法来构造这个查询?谢谢!