2014-02-14 1 views
0

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

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); 

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

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

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

+0

'string.replace («\ п»," ")' именно то, что вы сделали бы. Вы попробовали это? –

+0

Я не думаю, что '.find ({title:/\ n /}, 'title', ...' является допустимым синтаксисом. Кроме того, я не думаю, что у Mongo есть стратегия поиска и замены. курсор и используйте 'string.replace()', как у вас есть. –

+0

Это действительно так, я возвращаю нужные документы в console.log. Проблема в том, что я не знаю процедуры ее замены и обновления, потому что im javascript newbie ... – dzordz

ответ

1

Suprisingly Я думаю, что с изменением преуспел мой собственного код:

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!'); 
      } 
     }); 
    } 

}); 

я петельный через найденные документы и затем сохранить новый материал

+0

Возможно, вы обнаружили, что ваши документы не обновляются здесь, потому что Mongoose. js ограничивает блокировку документов, которые он возвращает. Если это происходит в конце, вам нужно вызвать метод toJSON() каждого документа, внести какие-либо изменения, а затем сохранить документ JSON-ified. – Philoktetes

+0

спасибо за ваши советы, но это код работал для меня как есть, documets обновлены wit h новых названий ... коллекция не является чем-то сложным до сих пор, поэтому я предполагаю, что из-за этого этот простой код работал для меня – dzordz

Смежные вопросы