使用 find_each? 指定要返回的字段

发布于 2025-01-04 00:26:09 字数 400 浏览 1 评论 0原文

目前,我们使用 MongoMapper 编写了批处理代码,但仍然比我们希望的要花更长的时间:

User.find_each(conditions: {is_active: true}, batch_size: 500) do |user|
  # simple stuff that only requires a couple fields from user
end

是否有某种方法可以告诉它只从用户模型中返回我们需要的字段,就像使用非批处理查找所做的那样?

User.where(is_active:true).fields(:field1, :field2).all

更改批量大小并没有帮助,因此我们正在寻找其他想法。

谢谢!

We currently have this batched code using MongoMapper which is still taking longer than we would like:

User.find_each(conditions: {is_active: true}, batch_size: 500) do |user|
  # simple stuff that only requires a couple fields from user
end

Is there some way to tell it to only return the fields we need from the User model like you can do with a non-batched find?

User.where(is_active:true).fields(:field1, :field2).all

Changing the batch size hasn't helped so we're looking for other ideas.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

七堇年 2025-01-11 00:26:09

尝试

User.where(is_active:true).select("field1, field2").find_each { |user| p user }

try

User.where(is_active:true).select("field1, field2").find_each { |user| p user }
池木 2025-01-11 00:26:09

MongoMapper 的 fields 过滤器应该可以与 正常工作find_each。但是,当在查询链的末尾使用时,find_each 返回一个枚举器而不是调用块,因此您必须添加额外的 .each

User.where(is_active:true).fields(:field1, :field2).find_each.each { |user| ...}

MongoMapper's fields filter should work fine with find_each. But, when used at the end of a query chain, find_each returns an enumerator rather than calling the block, so you have to add an extra .each:

User.where(is_active:true).fields(:field1, :field2).find_each.each { |user| ...}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文