Node.js, mongoose и MongoDb — заменить символ в определенной строке в нескольких документах

Итак, я играю с базой данных MongoDb, до сих пор использовал Python, но теперь пытаюсь победить Node.js. Я подключился к базе данных mongo с помощью mongoose. Настроил следующую схему:

var recipeSchema = new Schema({
    title: String,
    img: String,
    category: String,
    cook_time: String,
    method: String,
    person_count: String,
    short_desc:String,
    ingredients: [
        {
            amount: String,
            ingredient: String
        }
    ],
    recipe: String,
    advice: String

});
var Recipe = mongoose.model('Recipe', recipeSchema);

Я заполнил базу данных некоторой процедурой автоматизации в python, и проблема в том, что я каким-то образом получил два нежелательных символа \n в начале моей строки title. Мне удалось найти документы с Mongoose в Node, у которых есть заголовок, начинающийся с \n с помощью:

Recipe.find({ title: /\n/ }, 'title', function (err, document) {
    if (err) return handleError(err);
    console.log(document)
})

Я немного новичок в javascript, поэтому я собираюсь задать вопрос, как лучше всего заменить \n ничем (я полагаю, что-то вроде string.replace("\n","")) и обновить его обратно в мою базу данных mongo?


person dzordz    schedule 14.02.2014    source источник
comment
string.replace("\n", "") это именно то, что вы бы сделали. Вы пробовали это?   -  person Jordan Foreman    schedule 14.02.2014
comment
Я не думаю, что .find({ title: /\n/ }, 'title',... является допустимым синтаксисом. Кроме того, я не думаю, что у Монго есть стратегия поиска и замены. Я бы использовал курсор и использовал string.replace(), как у вас.   -  person Josh C.    schedule 14.02.2014
comment
действительно, я возвращаю разыскиваемые документы в console.log. Проблема в том, что я не знаю процедуры его замены и обновления, потому что я новичок в javascript...   -  person dzordz    schedule 14.02.2014
comment
mongoosejs.com/docs/api.html#document_Document-update   -  person Jordan Foreman    schedule 14.02.2014
comment
Могу ли я обновить несколько документов одновременно с этим?   -  person dzordz    schedule 14.02.2014


Ответы (1)


Удивительно, но я думаю, что мне удалось изменить мой собственный код:

Recipe.find({ title: /\n/ }, 'title', function (err, document) {

    for (i = 0, max = document.length; i < max; i++) {
        console.log(document[i]);
        var newTitle = document[i].title.replace(/\n/,"");
        document[i].title = newTitle;
        document[i].save(function (err) {
            if(err) {
                console.error('ERROR!');
            }
        });
    }

});

Я просмотрел найденные документы, а затем сохранил новые материалы.

person dzordz    schedule 14.02.2014
comment
Вы можете обнаружить, что ваши документы здесь не обновляются, потому что Mongoose.js ограничивает и блокирует возвращаемые документы. Если это происходит с вашей стороны, вам нужно вызвать метод toJSON() каждого документа, внести любые изменения, а затем сохранить документ в формате JSON. - person Philoktetes; 14.02.2014
comment
спасибо за ваш совет, но этот код работал у меня и так, документы обновляются с новыми названиями... коллекция пока не является чем-то сложным, поэтому я предполагаю, что из-за этого этот простой код у меня работал - person dzordz; 15.02.2014