我有一个 Mongoid 集合,我在其上运行 where
查询。
现在,我想构建一个数组,其中包含集合中所有文档的特定字段的值。
例如如果我的 Monogid 模型是
class Foo
field :color, type: String
end
我想做这样的事情-
red_ducks = Foo.where(color: 'red')
red_duck_ids = red_ducks.map(&:_id)
不幸的是,当查询结果很大时需要很长时间。例如,在我的案例中,10,000 个文档需要 6 秒。
有什么办法可以加快速度吗?
最佳答案
你不能只在你的范围内使用 _id 作为属性调用 distinct 吗?
red_duck_ids = Foo.where(color: 'red').distinct(:_id)
这将向您返回满足您条件的所有 _id
的列表。您可以在 Mongo's distinct
documentation 上找到更多信息.
你也可以看看only
如果您使用的是 3.1 或更新版本,您还可以使用 Criteria#pluck
.
关于ruby-on-rails - Ruby map/collect 在大型 Mongoid 集合上运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23492543/