Как обновить на основе существующих данных в Монго - PullRequest
6 голосов
/ 09 сентября 2010

Вроде монго нуб, и у меня такое чувство, что я решаю эту проблему с неправильной стороны.

У меня около 7 миллионов коллекций документов.В каждом документе есть два поля, которые я хочу изменить (не заменить), в основном это большие строки с \\n, и я хочу заменить их на \n.

Я потратил около часа, пытаясь найти способ «обратной ссылки» на объект, возвращаемый запросом, который полностью не существует.Каков наилучший подход для чего-то подобного?

Ответы [ 2 ]

6 голосов
/ 10 сентября 2010

Вам нужно будет запросить все документы и обновить их один за другим.Если вы сделаете это в JavaScript, это будет что-то вроде:

mydb = db.getSisterDB("whateverDBYoureUsing");
var cursor = mydb.foo.find();
while (cursor.hasNext()) {
    var x = cursor.next();

    /* replace \\n with \n in x's strings ... */

    db.foo.update({_id : x._id}, x);
}

. Вы можете скопировать это в файл .js (скажем, replace.js), изменить имена БД и коллекции и запустить какскрипт из оболочки:

mongo replace.js
0 голосов
/ 10 сентября 2010

То, что вы хотите, это сделать upsert http://www.mongodb.org/display/DOCS/Updating#Updating-UpsertswithModifiers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...