【问题标题】:Mongo query to remove "\n" from all _index fields?Mongo查询从所有_index字段中删除“\ n”?
【发布时间】:2011-10-17 15:32:52
【问题描述】:

我将 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 而不会出错)。

【问题讨论】:

  • 您编写的代码也应该在 MongoMapper 中工作,使用 find_each 和标准更改/保存而不是 update_attribute。尽管请注意,如果保存文件时文件变大,您可能会得到一些文件两次mongodb.org/display/DOCS/…

标签: mongodb mongoid mongomapper


【解决方案1】:

你在找这个:

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

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2016-08-29
    • 2020-02-14
    • 2019-10-14
    • 1970-01-01
    • 2019-04-27
    • 2010-10-09
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    相关资源
    最近更新 更多