2011-10-17 35 views
0

我正在使用mongomapper與我的rails應用程序。只要mongo條目在「_index」或任何字段中有「\ n」就會出錯。Mongo查詢從所有_index字段中刪除「 n」?

SyntaxError: (eval):1: syntax error, unexpected '\n', expecting tCOLON2 or '.' (eval):3: syntax error, unexpected keyword_end, expecting $end

原因的領域有「\ n」是因爲數據被刮掉並沒有適當清洗。

例如因爲這是問題的領域之一:

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

要紅寶石(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沒有錯誤)。

+0

你寫的應該MongoMapper工作太,使用'find_each'和標準變化的代碼/保存,而不是update_attribute。儘管請注意,如果文檔在保存文檔時變大,可能會返回兩次文檔http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database –

回答

2

您正在尋找這樣的:

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