¿Cómo puedo actualizar los datos en MongoDB cuando marco la casilla de verificación sin enviar ningún formulario?
mi esquema
const userSchema = new mongoose.Schema({ name: { type: String, trim: true, }, todos: [ { task: { type: String, trim: true, required: 'Please Enter your Task', }, dueDate: { type: Date, default: new Date(+new Date() + 3 * 24 * 60 * 60 * 1000), }, dueTime: String, done: { type: Boolean, default: false, }, }, ], }); Quiero actualizar el elemento done que está en la matriz de todos .
Traté de hacer esto.
JavaScript del lado del cliente principal
$(document).ready(function () { $('.todo--checkbox').change(function () { let isChecked; if (this.checked) { isChecked = true; $.ajax({ url: '/todo/' + this.value, type: 'PUT', data: { done: true }, }); } else { isChecked = false; $.ajax({ url: '/todo/' + this.value, type: 'PUT', data: { done: false }, }); } }); }); En el front-end, he establecido el valor de la casilla de verificación en el _id del objeto.
/routes/index.js aquí estoy manejando mis rutas
router.put('/todo/:id', todoControllers.checkStatus);Y finalmente estoy manejando ese controlador en mi todoCOntroller.js
exports.checkStatus = async (req, res) => { try { const user = await User.aggregate([ { $unwind: '$todos' }, { $match: { 'todos._id': req.params.id } }, ]); // res.json(user); console.log(user); } catch (err) { console.log('error: ', err); } }; Pero no recibo ningún user en mi consola.
Por favor, dime dónde me equivoco.
No es necesario utilizar agregado. Puedes hacerlo usando $elemMatch
const user = await User.find({ todos: { $elemMatch: { _id: req.params.id } }, });Para obtener más información, lea los documentos