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

196
Vistas
Error while deleting a value of element in mongoDB array using filter function?

I tried to find the solutions over here but unable to get success while using $pull as the array values I have does not contain `mongo_id'.

So the scenario is that , I am trying to delete the specific comment of the particular user which I am passing through query params. M

My mongo data looks like this:

enter image description here

Now I am making API Delete request like this : http://localhost:8000/api/articles/learn-react/delete-comment?q=1 on my localhost .

ANd finally my code looks like this:

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);

 });

I have used the filter function but it is not showing any error in terminal but also getting 500 status at postman.

Unable to figure out the error?

enter image description here

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

0

I believe you'll find a good answer here: https://stackoverflow.com/a/4588909/9951599

Something to consider...

You can use MongoDB's built-in projection methods to simplify your code. https://docs.mongodb.com/manual/reference/operator/projection/positional/#mongodb-projection-proj.-

By assigning a "unique ID" to each of your comments, you can find/modify the comment quickly using an update command instead of pulling out the comment by order in the array. This is more efficient, and much simpler. Plus, multiple read/writes at once won't interfere with this logic during busy times, ensuring that you're always deleting the right comment.

Solution #1: The recommended way, with atomic operators

Here is how you can let MongoDB pull it for you if you give each of your comments an ID.

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 }
});

Solution #2 - Not recommended

Alternatively, you could remove it by index:

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

I do not know why your filter is erroring, but I would recommend bypassing the filter altogether and try to utilize MongoDB's atomic system for you.

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