Estoy creando una aplicación que gestiona tareas sensibles al tiempo. Tengo API para crear tareas y recuperar tareas, y actualmente estoy tratando de hacer que mi API de eliminación funcione.
Un empleado tiene una matriz en MongoDB que contiene tareas pendientes con texto y estoy tratando de eliminar la tarea por ID en SoapUI. Con mi código actual, la solicitud de eliminación simplemente se agota después de un minuto más o menos.
Aquí está mi API de eliminación actual
router.delete("/:empId/tasks/:id", async (req, res) => { try { Employee.findByIdAndDelete( { empId: req.params.empId, }, { $pull: { todo: { _id: req.params.id, }, }, } ); } catch (e) { console.log(e); res.status(500).send({ message: "Internal server error: " + e.message, }); } });esquema actual
let itemSchema = new Schema({ text: { type: String }, _id: { type: String }, });tarea.servicio
deleteTask(empId: number, task: string, _id: number): Observable<any> { return this.http.delete('/api/employees/' + empId + '/tasks/' + _id); }y un ejemplo de un documento de empleado en MongoDB
{"_id":{"$oid":"61797a51d15ad09b88d167af"},"empId":"1012", "firstName":"web","lastName":"developer","__v":1,"done":[],"todo":[{"_id":"1","text":"test"}]}Cuando usa findByIDAndDelete, elimina todo el documento. Lo que necesita es actualizar ese documento en particular usando update() / findOneAndUpdate() / findByIdAndUpdate() . También debe esperar/usar una devolución de llamada para devolver el valor, como,
collection.findOneAndUpdate({_id:docId },{ $pull: {"todo":{"_id":yourId} }, }, function(error, data){ if(error){ return error} else {return data} })