簡體   English   中英

Mongoid:與關系有關的歸還文件?

[英]Mongoid: Return documents related to relation?

假設我正在模擬學生,課程和老師。 如果一個學生上了很多課,那么我怎么找到他們所有102級的老師呢? 因此,我將如何找到他們所有課程的老師? 現在,我有這個:

s = Mongoid::Student.find_by(name: 'Billy')
l = s.lessons.where(level: 102)
t = l.map { |lesson| lesson.teachers }.flatten

有沒有辦法將后兩行變成一個查詢?

每個集合至少需要一個查詢,在一個查詢中無法訪問多個集合(即沒有JOIN),所以這是您能做到的最好的。 但是,這:

t = l.map { |lesson| lesson.teachers }.flatten

正在進行l.length查詢,以使每堂課的老師。 您可以通過收集課程中的所有老師ID來清理它:

teacher_ids = l.map(&:teacher_ids).flatten.uniq # Or use `inject` or ...

然后根據這些ID抓住老師:

t = Teacher.find(teacher_ids)
# or
t = Teacher.where(:id.in => teacher_ids).to_a

如果所有這些查詢都不適合您,那么您就不得不對某些東西進行非規范化,以便將所需的所有內容都嵌入到一個集合中。 當然,這意味着您必須在情況發生變化時維護副本,並定期檢查副本是否存在一致性問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM