Проблема с выводом данных с mongodb + node js+ express
проблема состоит в одновременном выводом данных из mongodb. Когда пытаюсь вывести данные на страничку всё выводиться, но есть еще один промежуточный обработчик который увеличивает значеные в бд при загрузке страницы. Вот в этом и проблема как можно вывести одновременно и данные и что бы сработал запрос на бд на увеличение значения. Я новичок в js.
result.find({$or: [{name:'police'} , {name:'score7'}]}, function(err, data){
res.render('result_other', {result: data, title: 'Отчет из Полиции'});
});});
<h4><%=title%></h4>
<h3>
<% result.forEach(function (result) { %>
<%= result.text %>
<% }) %>
</h3>
router.get('/result/police', function(req, res) {
result.findOneAndUpdate({name:'score7'} ,{$inc:{text2:"11"}})});
<h3>
<% result.forEach(function (result) { %>
<%= result.text2 %>
<% }) %>
</h3> ```
Заранее спасибо.
вот этот код рендерит страницу и выводит в консоль текст, но не увеличивает значение в базе
router.get('/police', function (req, res, next) {
result.findOneAndUpdate({name:'score7'} ,{$inc:{text2:"11"}});
console.log('123');
next();
}, function (req, res) {
result.find({$or: [{name:'police'} , {name:'score7'}]}, function(err, data){
res.render('result_other', {result: data, title: 'Отчет из police'});
});
});
Ответы (1 шт):
Что-то типа такого:
router.get('/planet', async (req, res) => {
....
const filter = { name: 'Luke Skywalker' }
const update = { $inc : { visitCount : +1 } }
const doc = await Character.findOneAndUpdate(filter, update)
res.render('planet_report', {result: doc, title: 'Отчет'})
})
Смысл в том, чтобы использовать вариант с await перед вызовами функций, а не передачу колбэка.
Возможно нужен еще явный exec: findOneAndUpdate(....).exec()
Вообще действие (изменение) и последующее отображение лучше не перемешивать в одном запросе с клиента. И еще get может кэшироваться, и расчитывать во время get-а что-то изменить не стоит.