ruby-on-rails - Ruby map/collect 在大型 Mongoid 集合上运行缓慢

标签 ruby-on-rails ruby mongodb mongoid

我有一个 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/

相关文章:

ruby-on-rails - 在跟踪变量 n 的方法中创建循环

node.js - 分布式信号量系统,用于序列化不能同时运行的任务

mysql - Rails 4.2.7 mysql 设置两个自定义主键

ruby-on-rails - Ruby on Rails 中的多态性和表单

arrays - 如何替换数组中的重复元素?

ruby - 使用 RVM 在 OSX 10.7.3 上安装 Ruby 1.9.3(出错)

ruby-on-rails - Rails 5 允许 JSON 字段通过强参数不起作用

ruby-on-rails - 在 Rails 4 中是否弃用了 before_create 和 after_create 方法?

mongodb - 如何重命名 MongoDB 中所有文档的字段?

javascript - 如何在 NodeJS Express 路由器 res.render 中传递 Mongoose 返回变量?