2014-02-06 154 views
0

我使用Mongoid構建Rails 4應用程序。通過關係過濾Mongoid集合

我現在的問題是如何通過他們自己的關係來過濾一些Mongoid對象,並在結尾處有一個Mongoid :: Criteria而不是一個Array。

這是一些示例代碼:

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工作。喜歡返回一個數組,而不是一個Mongoid ::條件

我知道Mongoid有一個聚合框架,但它不是完全清楚如何使用它,也不是如果它是解決我的問題的最佳方法。

對此提出建議?

TIA, NGW

回答

1

你在這裏最大的問題是,MongoDB中沒有做類似的聯接關係數據庫一樣。在遍歷對象屬性的過程中,爲了方便您正在完成的所有工作都是在客戶端完成的,同時在查詢中通過連線牽入「相關」文檔。但是在發送查詢時,兩個集合不能連接。

您的解決方法是使用可在單獨查詢中獲得的數據來處理結果。一種方法是:rails mongoid criteria find by association

應該有堆棧溢出的其他例子。你不是第一個問。