Как обновить ВСЕ документы в коллекции, где значение атрибута должно отличаться (уникальный номер) для каждого документа?Обновление массива документов в 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() вызывается только один раз, но мне нужно, чтобы создать другой код для каждого документа. Поэтому ни один из этих примеров не работает.
Интересно, если это вопрос асинхронной? Если вы консолируете условие '! Err' и прямо перед' return next() ', они происходят в правильном порядке? – bencripps
Нет, это нормально. Проблема в том, что я не думаю, что вы можете передать массив документов с Model.update. Вы запрашиваете свои документы и задаете любые значения в функции обновления и устанавливаете значение multi в true. Но вы не можете устанавливать уникальные значения для документов, которые вы обновляете. Я добавил дополнительный код, чтобы показать это. – Paulie