Mongo查询从所有_index字段中删除“\ n”?

时间:2011-10-17 15:32:52

标签: mongodb mongoid mongomapper

我正在使用mongomapper和我的rails应用程序。只要mongo条目在“_index”或任何字段中有“\ n”,它就会出错。

  

SyntaxError:(eval):1:语法错误,意外'\ n',期待   tCOLON2或'。' (eval):3:语法错误,意外的keyword_end,   期待$ end

字段具有“\ n”的原因是数据被刮除且未正确清理。

例如,这是问题字段之一:

ruby-1.9.2-p180 :004 > Activity.where(:_index => /\n/i).first["_index"]
 => "Heating Building\n\nAir Emissions" 

要在ruby(mongoid)中修复它,它基本上是:

Activity.where(:_index => /\n/i).each do |a|
  a.update_attribute(:_index, a[:_index].gsub("\n", " "))
end

有没有办法只使用mongo查询来解决这个问题?

mongo查询需要遍历每个mongo行,并在_index字段中将“\ n”替换为“”。

我问的原因是我们没有时间将我们的应用程序从mongomapper移动到mongoid(mongoid知道如何处理\ n而不会出错)。

2 个答案:

答案 0 :(得分:3)

您正在寻找:

   db.activities.find({_index:/\n/}).forEach(function(obj) { obj._index = obj._index.replace(/\n/g, ' '); db.activities.save(obj);});

答案 1 :(得分:0)