Работа с Nodejs и MongoDB через Node родной драйвер MongoDB. Необходимо получить некоторые документы и внести изменения, а затем сохранить их обратно. Это пример:
db.open(function (err, db) {
db.collection('foo', function (err, collection) {
var cursor = collection.find({});
cursor.each(function (err, doc) {
if (doc != null) {
doc.newkey = 'foo'; // Make some changes
db.save(doc); // Update the document
} else {
db.close(); // Closing the connection
}
});
});
});
С асинхронным характером, если процесс обновления документа занимает больше времени, тогда, когда курсор достигает конца документов, соединение с базой данных закрывается. Не все обновления сохраняются в базе данных.
Если параметр db.close()
опущен, все документы будут правильно обновлены, но приложение зависает, никогда не выходит.
Я видел сообщение, предлагающее использовать счетчик для отслеживания количества обновлений, когда он возвращается к нулю, а затем закрывает db. Но я делаю что-то не так? Каков наилучший способ справиться с такой ситуацией? Использовать db.close()
для освобождения ресурса? Или нужно открыть новое соединение db?