Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

194
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!