2013-07-25 3 views
3

쿼리 has_many 현재이 컬렉션 학생 과정 (주제 내장)Mongoid 내가 아주 간단한 MongoDB의 모델이

class Student < User 
    include Mongoid::Document 
    has_many :courses 

class Course 
    include Mongoid::Document 
    belongs_to :student 
    embeds_many :subjects 

내가 mongoid이 has_many 직접 즉

Student.courses 
에게 질의를 지원하지 않습니다 알고

그래서 학생 대상을 얻고 싶다면 이것이 유일한 방법입니다.

,083,210

이 현재 3 개 쿼리

MOPED: 127.0.0.1:27017 QUERY  database=test collection=users selector= {"$query"=>{"_type"=>{"$in"=>["Student"]}}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (1.1775ms) 
    MOPED: 127.0.0.1:27017 QUERY  database=test collection=courses selector={"student_id"=>"51f09457b5b605db25000002"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.8862ms) 
    MOPED: 127.0.0.1:27017 QUERY  database=test collection=courses selector={"_id"=>"51f09457b5b605db25000003"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.8380ms) 

보다 효율적인 방법이 있나요

합니까? 나는 Course in Student를 삽입 할 수 있지만 Courses Collection에 직접 문의하는 것을보고있다.

답변

6

시도해보십시오.

Subject.where(:course_id.in => @student.courses.map(&:id)) 
+0

그게 더 좋습니다. .map function()에 대한 문서를 찾으려고하면 그 위치를 알 수 있습니까? – dboyd68

+0

쿼리 포인트에서 @ student.courses와 @ student.courses.map (& : id)를 사용하는 데 어떤 차이가없는 것 같습니까? 존재하지 않습니다. – dboyd68

+4

Array # map은 배열을 반복하고 각 값을 블록에 전달하고 블록의 반환 값을 새로운 배열로 수집하는 표준 Ruby 메서드입니다. –

관련 문제