Huy*_*Huy 12 ruby-on-rails mongodb mongoid
我在我的rails应用程序中有一个mongo查询,因为该集合非常庞大.
FbCheckin.where(ext_fb_place_id: self.ext_fb_place_id).all
Run Code Online (Sandbox Code Playgroud)
我从文档中读到,您可以添加一个timeout选项,以防止光标超时,并显示以下消息:
Moped::Errors::CursorNotFound: The operation: "GET MORE" failed with error
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,包括
FbCheckin.where(ext_fb_place_id: ext_fb_place_id, {:timeout=>false}).all
Run Code Online (Sandbox Code Playgroud)
和
FbCheckin.find(ext_fb_place_id: ext_fb_place_id, {:timeout=>false}).all
Run Code Online (Sandbox Code Playgroud)
但这些都不会阻止光标超时.
有谁知道我怎么能做这个查询并收集所有FbCheckins没有光标超时事先?
谢谢
Que*_*tin 32
你想要的是在查询mongodb时将光标超时设置为false.
这是你可以用mongoid 3做的:
FbCheckin.where(...).no_timeout.each do |fb_checkin|
"do something with fb_checkin"
end
Run Code Online (Sandbox Code Playgroud)
小智 -3
mongoid 将默认终止长时间查询,然后引发此错误
您可以更改 mongoid.yml 中的 raise_not_found_error 选项来避免此错误
例如:
production:
sessions:
default:
database: local
hosts:
- localhost:27017
options:
allow_dynamic_fields: true
raise_not_found_error: false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6106 次 |
| 最近记录: |