Я использую MongoDB и NodeJS и пытаюсь предварительно загружать мою коллекцию customers
при каждой загрузке сайта. Я очищаю его, заполняю его пустыми документами и, наконец, заменяю (если имеется) любой из них реальными данными из внешнего источника.
Я пытался использовать save()
, но он выдает сообщение об ошибке 'ParallelSaveError' - Can't save() the same doc multiple times in parallel. Document: 3"
. Это не выборка данных перед рендерингом. Это приводит к отсутствию элементов в панели управления, отображается только один или два. Я прочитал кое-что об асинхронных функциях и обещаниях, но я не уверен, как применять их в моем случае. Как это реализовать?
dbtools.js
var empty = new Customer({
_id: '',
name: 'Unused',
surname: '',
birthday: '',
deathday: '',
phx: false,
ntw: false,
gender: 'empty'
});
module.exports = {
getCustomers: async function() {
// Fill array with empty slots
slots = [empty, empty, empty];
// Clearing collection
Customer.deleteMany({}, function(err) {});
// Looping through Array, add each Document
for (i = 0; i < slots.length; i++) {
slots[i]._id = i+1;
mongoose.connection.collection('customers').insert(slots[i]);
// or
slots[i].save(function (err) { if (err) return handleError(err); });
}
// Updating with external data
..
}
}
router.js
var tools = require('./dbtools.js');
..
router.get('/', function (req, res) {
tools.getCustomers();
Customer.find({}, function (err, customers) {
if (err) return handleError(err);
res.render('dashboard', {
title: 'Overview',
customers: customers
});
});
});
..