我在远程有一个mongo数据库,有一个名为 con_v 的集合,这里是一个对象的预览。
{
"_id" : ObjectId("xxxxxxx"),
"complete" : false,
"far" : "something",
"input" : {
"number_of_apples" : 2,
"type_of_apple" : "red"
},
"created_at" : ISODate("xxxxx"),
"error" : false,
"version_id" : ObjectId("someID"),
"transcript" : "\nUser: \nScript: hello this is a placeholder script.\nScript: how many apples do you want?\n",
"account_id" : null,
"channel_id" : ObjectId("some channel ID"),
"channel_mode_id" : ObjectId("some channel mode ID"),
"units" : 45,
"updated_at" : ISODate("xxxx")
}
我正在使用rails app从远程mongo db进行查询,如果我提取20-50条记录它的响应但我一次需要超过1000条记录,我有一个函数从该记录创建csv文件,之前它工作正常,但现在它比平常花费更长时间并冻结服务器(总记录数约为30K)。直接通过mongo shell或使用rails控制台,查询正在花时间。如果我在本地机器应用程序中使用克隆数据库工作正常,那就相同了。
这是模型文件中的代码,用于查询和生成csv文件
def self.to_csv(con_v)
version = con_v.first.version
CSV.generate do |csv|
fields = version.input_set_field_names
extra_fields = ['Collected At', 'Far', 'Name', 'Version','Completed']
csv << fields + extra_fields
con_v.each do |con|
values = con.input.values_at(*fields)
extra_values = [
con.created_at,
con.units,
con.far,
version.name,
con.complete
]
csv << values + extra_values
end
end
坚持壳是应用程序在远程数据库上花费更长时间,非常慢的mongo查询但是在本地数据库中工作正常,使用pry调试,控制器代码很好它获取记录以及远程响应时间很慢< /强>