我正在尝试使用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,所以你得到这样的东西:
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)
有没有更好的方法来构建此查询?谢谢!
答案 0 :(得分:1)
这里的问题是,通过示例Mongoid没有机会对它做任何事情,因为你提供了一个Ruby哈希,在执行方法之前,它被评估为只有一个键(因为键是相同的):
Post.where(:'comments.author_id'=> u1.id,:'comments.author_id'=> u2.id)
您想要做的是:
Post.any_in(:'comments.author_id'=> [u1.id,u2.id])