实际上那不是一个数组,它是一个代理。您可以检查日志并查看轻便摩托车正在为每张专辑调用 .count 函数(在我的情况下为 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)
此外,如果您想获取 Criteria 对象,您可以这样做album.images.scoped
如果你有很多专辑,它会调用 count for ever one,这是不好的。我建议您在这种情况下使用计数器缓存。你可以使用我拥有的一个分支,包括计数器缓存到 mongoid https://github.com/arthurnn/mongoid/tree/2215-counter_cache