通过关系过滤Mongoid集合

时间:2014-02-06 11:07:00

标签: ruby-on-rails mongodb mongoid database

我正在使用Mongoid构建一个Rails 4应用程序。

我现在遇到的问题是如何通过自己的关系过滤一些Mongoid对象,并在末尾有一个Mongoid :: Criteria而不是数组。

这是一些示例代码:

class Editor
  include Mongoid::Document

  has_many :books

  def likes
    books.collect { |book| book.likes }
  end
end

class Book
  include Mongoid::Document

  belongs_to :editor
end

我希望能够做的是:

Editor.last.likes.where(:created_at.gt => 10.days.ago)

但当然这不起作用,因为Editor.last.likes返回一个数组,而不是一个Mongoid :: Criteria

我知道Mongoid有一个聚合框架,但我不清楚如何使用它,也不是解决问题的最佳方法。

建议?

TIA,   NGW

1 个答案:

答案 0 :(得分:1)

你遇到的最大问题是MongoDB没有像关系数据库那样进行连接。遍历对象属性时为方便起见而进行的所有工作都在客户端完成,同时在查询中通过线路拉入“相关”文档。但是在发送查询时,无法连接这两个集合。

您的变通方法解决方案是使用您可以在单独的查询中获得的数据来定位结果。一种方法是:rails mongoid criteria find by association

Stack Overflow上应该有其他示例。你不是第一个问的人。