MongoDB 求教:mongoid3 的关联查询问题?!

mimosa · 2012年10月19日 · 最后由 mimosa 回复于 2012年10月23日 · 3484 次阅读

Place.rb has_many :reviews

Review.rb belongs_to :place 关联查询: Place.where('reviews.state' => 'published')

结果为空,但使用 Embed 就可以,难道是 Mongoid 3 变了?!还是我那里搞错了?

Mongodb 没有关联查询

Place.where(
 :_id.in => Review.where(state: 'published').only(:place_id).distinct(:place_id)
)

@mimosa 跟嵌套子查询的效果差不多了

#1 楼 @Rei 无关联关系??那请教一下:已经获得一个 place 实例,就不能直接 place.reviews.XX 么,整天说没有定义方法,有什么好建议,做类似关联查询

#4 楼 @sforce100 可以,不过这个是关联方法,不是关联查询。也就是它会分成两次查询进行。

Place.where('reviews.state' => 'published')

这个查询针对的是 places collection,places 里面没有 reviews 数据,所以不能查。

二楼的方法可以,会执行两次查询。如果因为性能考虑需要一次查询获得,那么就用 embed。

#4 楼 @sforce100 其实有点不清楚你的需求,顶楼要查的是 Place,4 楼要查的是 reviews。

#6 楼 @Rei 谢谢,我之前都是用 embed 的,网上看到一个事例,在介绍 has_many 时用到了关联查询,还以为新版 mongoid 支持呢~~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号