Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
Node.js y MongoDB recuperan datos de la actualización anterior en lugar de la actualización actual

Estoy practicando Node.js y estoy creando un sitio web donde la gente puede votar cosas y luego obtener los resultados. Los votos se realizan utilizando la ruta POST /coffeeorwater que luego redirige a la ruta /results1 que muestra los resultados.

El problema = los votos van del formulario en la interfaz a Node a MongoDB y de regreso a Node y luego a la ruta /results1, pero a veces los números de votos que se muestran están detrás de los números que están en la base de datos.

Creo que tiene algo que ver con la naturaleza asincrónica de Node o tal vez con la forma en que configuré las rutas, ya que los datos deben enviarse y luego regresar rápidamente.

Lo que he intentado hasta ahora es buscar cosas como "datos que regresan usando Node que no se actualizan inmediatamente" y "retraso en el recuento al devolver datos de MongoDB", pero no he encontrado la solución. Soy totalmente autodidacta, así que pido disculpas si algo de esto es obvio o debería haber sido encontrado fácilmente.

 const express = require('express'); const application = express(); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); application.set('view engine', 'ejs'); application.use(bodyParser.urlencoded({ extended: true })); application.use(express.json()); mongoose.connect(process.env.DATABASE_PASSWORD) .then(console.log('Database connected')); const db = mongoose.connection; application.get('/', (request, response) => { response.render('index', { data: '1234', }); }); application.post('/coffeeorwater', async (request, response, next) => { const choice = request.body.coffeeorwater; const updatevotes = async () => { if (choice == 'coffee') { db.collection('data').update( { question: 'coffeeorwater' }, { $inc: { coffeevotes: 1 } } ) } if (choice == 'water') { db.collection('data').update( { question: 'coffeeorwater' }, { $inc: { watervotes: 1 } } ) } }; await updatevotes(); console.log('POST made'); response.redirect('/results1'); }); application.get('/results1', async (request, response) => { const results = await db.collection('data').findOne({ question: 'coffeeorwater' }); response.render('results1', { coffeevotes: results.coffeevotes, watervotes: results.watervotes, }); }); application.listen(8080, () => { console.log('Listening here'); });
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

para db.collection('data').update en primer lugar, no es un método asíncrono, por lo que puede usar la devolución de llamada para obtener el resultado O usar mongoose mongoose Model.updateOne

verifique esta referencia nodejs_mongodb_update

NOTA: - si todavía tiene un problema, mencione en el comentario, le daré un ejemplo

about 4 years ago · Juan Pablo Isaza Denunciar

0

Podrías usar Model.findOneAndUpdate

Código de ejemplo:

Model.findOneAndUpdate({[donde condiciones]}, {[datos para actualizar]}, {[opciones]}, función de devolución de llamada());

El modelo podría ser cualquier modelo de mangosta.

opciones =>

-> nuevo: booleano (verdadero/falso), predeterminado: falso; si se establece en verdadero, devuelve el documento actualizado

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda