私のレールアプリで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を処理する方法を知っています)。
あなたが書いたコードは 'find_each'および標準の変更/ update_attributeの代わりに保存を使用して、あまりにもMongoMapperで動作するはずです。メモを保存したときにドキュメントが大きくなる場合は、ドキュメントを2回前に取得する可能性があります。http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database –