当前位置:  开发笔记 > 编程语言 > 正文

如何在没有超时的情况下使用mongoid/rails查询mongodb?

如何解决《如何在没有超时的情况下使用mongoid/rails查询mongodb?》经验,为你挑选了3个好方法。

我有一个rake任务处理一组记录并将其保存在另一个集合中:

batch = [] 

Record.where(:type => 'a').each do |r| 
  batch <<  make_score(r)

  if batch.size %100 == 0 
    Score.collection.insert(batch) 
    batch = [] 
  end 
end 

我一次处理大约100K的记录.不幸的是,在20分钟,我收到一个Query response returned CURSOR_NOT_FOUND错误.

mongodb faq说使用skip和/ limit或关闭超时,使用它们所有东西大约慢2-3倍.

如何与mongoid一起关闭超时?



1> Jesse Wolgam..:

在MongoDB的文档说,你可以在超时布尔通,而且超时是假的,它永远不会超时

collection.find({"type" => "a"}, {:timeout=>false})

在你的情况下:

Record.collection.find({:type=>'a'}, :timeout => false).each ...

我还建议您使用Mongo查看map-reduced.它似乎是对这种集合数组操作进行了调整:http://www.mongodb.org/display/DOCS/MapReduce



2> Quentin..:

在mongoid 3中你可以使用这个:

ModelName.all.no_timeout.each do |m|
   "do something with model"
end

这非常方便.



3> Hakan Ensari..:

看起来,至少现在,您必须通过Mongo驱动程序进行漫长的路径和查询:

Mongoid.database[collection.name].find({ a_query }, { :timeout => false }) do |cursor| 
  cursor.each do |row| 
    do_stuff 
  end 
end

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有