2012-11-15 3 views
2

를 사용하여 쿼리를 사용하여 Mongoid Mongoid :나는 다음 모델을 가지고 계산

class Album 
    have_many :images 
end 

class Image 
    belongs_to :album 
end 

내가 어떤 이미지에만 앨범 싶어 :

Album.all.select{ |a| a.images.count > 0 } 

을하지만 배열을 반환하고 내가 필요 몽고 이드 :: 기준. 나는 같은 것을 사용하려고했다 :

그리고 그것은 항상 0 요소를 반환한다. 내가 어떻게 해 ?

+0

확실하지는 않지만'Album.joins (: images)'는 최소한 하나의 이미지가있는 앨범 배열을 반환해야합니다. 나는 그것에 대해 확신하지 못합니다. – MrYoshiji

답변

1

실제로 배열이 아니며 프록시입니다. 로그를 확인하고 모든 앨범 (내 경우 2)에 대해 전화 걸기 기능이 호출되는지 확인할 수 있습니다.

1.9.3-p194 :043 > Album.each { |a| a.images.count } 
    MOPED: 127.0.0.1:27017 QUERY  database=mongo_benchmark collection=albums selector={} flags=[] limit=0 skip=0 fields=nil (0.7441ms) 
    MOPED: 127.0.0.1:27017 COMMAND  database=mongo_benchmark command={:count=>"images", :query=>{"album_id"=>"50e36dd17c71c110ff000001"}} (0.5209ms) 
    MOPED: 127.0.0.1:27017 COMMAND  database=mongo_benchmark command={:count=>"images", :query=>{"album_id"=>"50e36f8f7c71c110ff000004"}} (0.3800ms) 

또한 당신이 기준을 얻으려면 당신이 좋은하지 않은, 어느 하나 계산 호출 앨범의 많은이있는 경우 album.images.scoped

을 할 수있는 객체. 이 상황에서 카운터 캐시를 사용하는 것이 좋습니다. 당신은 mongoid에 카운터 캐쉬를 포함하는 브랜치를 사용할 수 있습니다. https://github.com/arthurnn/mongoid/tree/2215-counter_cache

+0

카운터 캐시에 대해 잘 알지 못했습니다. – drinor

관련 문제