2014-09-09 4 views
0

Как обновить ВСЕ документы в коллекции, где значение атрибута должно отличаться (уникальный номер) для каждого документа?Обновление массива документов в Mongoose

Ниже мой текущий код. На самом деле это похоже на обновление (я не получаю сообщение об ошибке), но значения в db не обновляются.

Model.find({}, function (err, docs) { 

    if (err) { 

     console.log(err); 

    }; 



if(docs && docs.length > 0){ 


    for(var i=0; i<docs.length; i++){ 

    //SET NEW VALUE FOR EACH DOC - VALUE MUST BE UNIQUE TO EACH DOC 
     docs[i].code = generateRandomCode();  

    } 


    // PASS IN ARRAY OF UPDATED DOCS TO BE SAVED 
    Model.update(docs, function (err, docs) { 
     if (err) { 
      console.log(err); 
     } 

     if(!err){ 
      req.updatedSuccessfully = true; 
     } 

     return next(); 



    }); 


} 
else{ 

    return next(); 

} 


}); 

До этого я пытался сделать что-то вроде этого:

Model.update({}, { code: generateRandomCode() }, { multi: true }, function (err,  numberAffected, raw) { 
    if (err) return handleError(err); 
    console.log('The number of updated documents was %d', numberAffected); 
    console.log('The raw response from Mongo was ', raw); 
}); 

Проблема с этим состоит в том, что generateRandomCode() вызывается только один раз, но мне нужно, чтобы создать другой код для каждого документа. Поэтому ни один из этих примеров не работает.

+0

Интересно, если это вопрос асинхронной? Если вы консолируете условие '! Err' и прямо перед' return next() ', они происходят в правильном порядке? – bencripps

+0

Нет, это нормально. Проблема в том, что я не думаю, что вы можете передать массив документов с Model.update. Вы запрашиваете свои документы и задаете любые значения в функции обновления и устанавливаете значение multi в true. Но вы не можете устанавливать уникальные значения для документов, которые вы обновляете. Я добавил дополнительный код, чтобы показать это. – Paulie

ответ

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