Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

165
Vistas
MongoDB: ¿Cómo elimino un objeto anidado por índice?

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.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

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.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda