2015-10-21 3 views
0

Я в поиске документов по _id в цикле и обновление булево в каждом документе:Mongoose: Документы не обновляя

db.items.findById(key, function(error, item) { 

    item.flags.cake = false; 

    item.update(function(error, zzz) { 
    if(error) return next(error); 
    console.log('output ',zzz); 
    });  
}); 

Но документы не будут обновляться. Мангуст схема для item:

flags: { 
    cake:Boolean 
} 
+0

не должно быть 'item.save'? –

+1

Откуда берется «следующий»? Кроме того, «обновление» является асинхронным, а использование циклов означает, что ваш «ключ» установлен на последний элемент цикла. Поэтому, полагаю, обновляется только последний элемент? Попробуйте создать функцию, которая будет вызываться в каждом цикле цикла :) –

ответ

1

Используйте save() метод вместо который делает использование обратного вызова, который будет принимать три параметра вы можете использовать: 1) err если произошла ошибка 2) item, который является сохраненный элемент 3) numAffected будет 1, когда документ был успешно сохранялся в MongoDB, в противном случае 0.

Items.findById(key, function(error, item) {  
    item.flags.cake = false; 

    item.save(function (err, item, numAffected) { 
     if (err) console.log(err) 
     console.log('output ', item); 
    });  
}); 

As дополнительная мера контроля потока, сохранение вернет обещание.

item.save().then(function(item) { 
    console.log('output ', item); 
}); 
Смежные вопросы