Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

204
Visualizações
¿Error al eliminar un valor de elemento en la matriz mongoDB usando la función de filtro?

Traté de encontrar las soluciones aquí, pero no pude tener éxito al usar $pull ya que los valores de matriz que tengo no contienen `mongo_id'.

Entonces, el escenario es que estoy tratando de eliminar el comentario específico del usuario en particular que estoy pasando a través de los parámetros de consulta. METRO

Mis datos de mongo se ven así:

ingrese la descripción de la imagen aquí

Ahora estoy haciendo una solicitud de eliminación de API como esta: http://localhost:8000/api/articles/learn-react/delete-comment?q=1 en mi host local.

Y finalmente mi código se ve así:

 import express from "express"; import bodyParser from "body-parser"; import { MongoClient } from "MongoDB"; const withDB = async (operations, res) => { try { const client = await MongoClient.connect( "mongodb://localhost:27017", { useNewUrlParser: true }, { useUnifiedTopology: true } ); const db = client.db("my-blog"); await operations(db); client.close(); } catch (error) { res.status(500).json({ message: "Error connecting to db", error }); } }; app.delete("/api/articles/:name/delete-comment", (req, res) => { const articleName = req.params.name; const commentIndex = req.query.q; withDB(async(db) => { try{ const articleInfo = await db.collection('articles').findOne({name:articleName}); let articleAllComment = articleInfo.comments; console.log("before =",articleAllComment) const commentToBeDeleted = articleInfo.comments[commentIndex]; //console.log(commentToBeDeleted) // articleAllComment.update({ // $pull: { 'comments':{username: commentToBeDeleted.username }} // }); articleAllComment = articleAllComment.filter( (item) => item != commentToBeDeleted ); await articleAllComment.save(); console.log("after - ",articleAllComment); //yaha per index chahiye per kaise milega pta nhi? //articleInfo.comments = gives artcle comment res.status(200).send(articleAllComment); } catch(err) { res.status(500).send("Error occurred") } },res); });

He usado la función de filter , pero no muestra ningún error en la terminal, sino que también obtiene el estado 500 en el cartero.

¿No puede averiguar el error?

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que encontrarás una buena respuesta aquí: https://stackoverflow.com/a/4588909/9951599

Algo a tener en cuenta...

Puede utilizar los métodos de proyección integrados de MongoDB para simplificar su código. https://docs.mongodb.com/manual/reference/operator/projection/positional/#mongodb-projection-proj.-

Al asignar una "ID única" a cada uno de sus comentarios, puede encontrar/modificar el comentario rápidamente usando un comando de actualización en lugar de extraer el comentario por orden en la matriz. Esto es más eficiente y mucho más simple. Además, varias lecturas/escrituras a la vez no interferirán con esta lógica durante las horas punta, lo que garantiza que siempre elimine el comentario correcto.

Solución #1: La forma recomendada, con operadores atómicos

Así es como puede dejar que MongoDB lo extraiga por usted si le da una identificación a cada uno de sus comentarios.

 await db.collection('articles').updateOne({ name:articleName }, { $pull:{ "comments.id":commentID } }); // Or await db.collection('articles').updateOne({ name:articleName, "comments.id":commentID }, { $unset:{ "comments.$":0 } });

Solución #2 - No recomendado

Alternativamente, puede eliminarlo por índice:

 // I'm using "3" here staticly, put the index of your comment there instead. db.collection('articles').updateOne({ name:articleName }, { $unset : { "comments.3":0 } })

No sé por qué su filtro está fallando, pero recomendaría omitir el filtro por completo e intentar utilizar el sistema atómico de MongoDB para usted.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda