Simplemente me gustaría eliminar un registro de una lista que se muestra dinámicamente. Probé todas las permutaciones del código de back-end y simplemente no puedo hacer que funcione.
El backend se llama así:
async function deletePost() { setLoading(true) try { await axios.delete(`/api/delete/${id}`) alert("Post deleted") } catch (err) { // notify user that something went wrong console.log(err) } finally { setLoading(false) } setLoading(false) }Y /api/delete/${id} se ve así:
import { connectToDatabase } from "util/mongodb" export default async (req, res) => { const { id } = req.query; console.log(id) try { const { db } = await connectToDatabase() await db.collection("users").deleteOne({'_id': `ObjectId("${id}")`}) res.sendStatus(200).send({ done: true }) } catch (error) { return res.json({ error }) } }El registro de la consola muestra la identificación correcta de la publicación, se muestra la alerta en el código de interfaz de 'probar', pero la publicación de la represa simplemente no se elimina. ¿Alguien puede ofrecer algún consejo, por favor? He intentado ".deleteOne({'_id': id})" pero eso tampoco hace nada.
Creo que está buscando una cadena, en lugar de ObjectId, por lo que no coincide ningún documento.
Puede solucionarlo convirtiendo a ObjectId y luego usando el valor convertido, .deleteOne .
var ObjectId = require('mongodb').ObjectId; const { id } = req.query; const convertedObjectId = new ObjectId(id); db.collection("users").deleteOne({_id: convertedObjectId })Ejemplo real de la documentación:
try { db.orders.deleteOne( { "_id" : ObjectId("563237a41a4d68582c2509da") } ); } catch (e) { print(e); }Referencia: Documentación de MongoDB - Eliminar uno .
Problema solucionado:
app.delete("/cars/:id", async (req, res) => { const carsId = req.params.id; const query = { _id: ObjectId(carsId) }; const result = await carCollection.deleteOne(query); res.send(result); });