así que quiero hacer un sistema de respuesta de eliminación, pero no sé cómo hacerlo. ¿Puedes ayudarme? Esta es la imagen de mi tabla de mi mongodb
y el codigo que he probado es pero no funciona
app.post("/remove-reply", async (req, res) => { const index = parseInt(req.body.index) - 1 await Posts.findOneAndUpdate({ _id: req.body.id }, [ { $set: { "Comments.$[].replies": { $concatArrays: [ { $slice: ["$Comments.$[].replies", index] }, { $slice: ["$Comments.$[].replies", { $add: [1, index] }, { $size: "$Comments.$[].replies" }] } ] } } } ]) res.redirect("/") })y me da este error
(node:17376) UnhandledPromiseRejectionWarning: MongoServerError: Invalid $set :: caused by :: FieldPath field names may not start with '$'. at MessageStream.messageHandler (C:\Users\The.Peerapon\Desktop\programming\Express-app\node_modules\mongodb\lib\cmap\connection.js:467:30) at MessageStream.emit (events.js:400:28) at processIncomingData (C:\Users\The.Peerapon\Desktop\programming\Express-app\node_modules\mongodb\lib\cmap\message_stream.js:108:16) at MessageStream._write (C:\Users\The.Peerapon\Desktop\programming\Express-app\node_modules\mongodb\lib\cmap\message_stream.js:28:9) at writeOrBuffer (internal/streams/writable.js:358:12) at MessageStream.Writable.write (internal/streams/writable.js:303:10) at TLSSocket.ondata (internal/streams/readable.js:731:22) at TLSSocket.emit (events.js:400:28) at addChunk (internal/streams/readable.js:293:12) at readableAddChunk (internal/streams/readable.js:267:9) (Use `node --trace-warnings ...` to show where the warning was created) (node:17376) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:17376) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.mi objetivo es hacer clic en el botón Eliminar en la respuesta para eliminarlo por índice.
para cada comentario/respuesta, guarde su índice en la base de datos y utilícelo como una especie de identificación. luego, cuando alguien quiere eliminar un comentario, haces lo siguiente:
app .post('/remove-reply', async (req, res) => { const postId = req.body.id; const commentIndex = parseInt(req.body.commentIndex) - 1; const replyId = req.body.replyIndex; await Posts.findOneAndUpdate({ _id: postId }, { $pull: { [`Comments.${ commentIndex }.replies`]: { _id: replyId } } }); res.redirect('/'); });por lo tanto, cuando un usuario hace clic en una respuesta para eliminar, debe tener los 3 campos que necesita para encontrar la respuesta exacta que desea eliminar.
También puede simplemente guardar una identificación única generada automáticamente para cada elemento para usar como un identificador\índice, ya que lo tratamos como una colección más que como una matriz en este caso de uso. Probablemente será más fácil de mantener ya que después de eliminar un comentario, el índice ya no está alineado con la matriz subyacente.