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

195
Visualizações
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 Respostas
Responde à pergunta

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