Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

156
Visualizações
nodo backend js con mongoDB, la solicitud de parche no actualiza el valor del tipo de fecha

Uso node.js para construir el backend y conservar los datos en MongoDB. Cuando hago una solicitud de parche, puedo cambiar los valores de todos los campos de otros tipos excepto el de tipo fecha.

Este es el código de back-end para la solicitud de parche.

 router.patch('/:id', isLoggedIn, async (req, res) => { try { const updatedBooking = await Booking.updateOne( {_id: req.params.id}, { $set: {userEmail: req.body.userEmail}, $set: {shiftDate: req.body.shiftDate}, $set: {isMorningShift: req.body.isMorningShift} } ); res.json(updatedBooking); } catch (err) { res.send({message: err}); } });

Este es el esquema de la base de datos:

 const BookingSchema=mongoose.Schema({ userEmail:{ type:String, required:true }, shiftDate:{ type:Date, required:true }, isMorningShift:{ type: Boolean, required: true } });

Los objetos en MongoDB se ven así:

 { "_id": "61787183e67b6822180175f9", "userEmail": "admin2@parantion.nl", "isMorningShift": false, "__v": 0, "shiftDate": "2066-06-23T00:00:00.000Z" }

¿Cuál podría ser el problema?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

En lugar de múltiples $set , actualice todas las claves en una,

 const updatedBooking = await Booking.updateOne( {_id: req.params.id}, { $set: { userEmail: req.body.userEmail, shiftDate: new Date(req.body.shiftDate), isMorningShift: req.body.isMorningShift } } );
about 4 years ago · Juan Pablo Isaza Relatório

0

La respuesta de @ fractal397 funcionará bien. Si quieres un código más limpio, puedes usar esto.

 const bookingId = req.params.id; const payload = userEmail: req.body.userEmail, shiftDate: new Date(req.body.shiftDate), isMorningShift: req.body.isMorningShift } const booking = await Booking.findByIdAndUpdate(bookingId, payload);

PD: después de Mongoose 4.0, el new valor de findByIdAndUpdate se ha cambiado a false de forma predeterminada. Entonces, en esta operación, los datos se actualizarán en la base de datos pero devolverá el valor anterior de booking . Para obtener un valor actualizado en respuesta también, tendrá que hacer:

const booking = await Booking.findByIdAndUpdate(bookingId, payload, { new : true });

about 4 years ago · Juan Pablo Isaza Relatório

0

Cambiar la línea:

 $set: {shiftDate: req.body.shiftDate}

a

 $set: {shiftDate: new Date(req.body.shiftDate)}

o

 $set: {shiftDate: new Date()} //for todays date in your local format

Esto funciona: probé esto con express así:

 app.get('/updateOne', async (req, res) => { //get data through query params in url const id = req.query.id; const date = req.query.date; //connect to db and collection //1 connect //2 set db and collection const client = await MongoClient.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true, }); const collection = client.db("sample_airbnb").collection("listingsAndReviews"); //update function for date field try { const updatedBooking = await collection.updateOne( {_id: id}, { $set: {name: new Date(date)} //2066-06-23T00:00:00.000Z } ); res.json(updatedBooking); } catch (err) { res.send({'message': err}); } })

Respuesta:

 { "acknowledged": true, "modifiedCount": 1, "upsertedId": null, "upsertedCount": 0, "matchedCount": 1 }

Y datos actualizados en Mongoscloud:

 _id : "100009690" name : 2066-06-23T00:00:00.000+00:00

Llamé al punto final así: http://localhost:5000/updateOne?id=100009690&date=2066-06-23T00:00:00.000Z y ves que es el mismo formato de fecha que dices que esperas.

¿Puede actualizar su OP y mostrarnos el formato exacto que está pasando? HAGA un console.log(req.body.shiftDate) en la línea 7 justo antes de pasarlo. Sospecho que aquí es donde está el problema.

Obviamente, no debería agregar fechas al campo de nombres, pero esto es solo para una prueba rápida.

Si actualizo varios campos, lo haría con:

 //update function try { const updatedBooking = await collection.updateOne( {_id: id}, { $set: { name: name, email: email, lastShift: new Date(date) } } ); res.json(updatedBooking); } catch (err) { res.send({'message': err}); }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda