2011-10-17 8 views
0

私のレールアプリでmongomapperを使用しています。 mongoエントリが "_index"またはいずれかのフィールドに "\ n"を持つたびにエラーになります。すべての_indexフィールドから " n"を削除するMongoクエリ?

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

あなたが書いたコードは 'find_each'および標準の変更/ update_attributeの代わりに保存を使用して、あまりにもMongoMapperで動作するはずです。メモを保存したときにドキュメントが大きくなる場合は、ドキュメントを2回前に取得する可能性があります。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);}); 
関連する問題