Как извлечь данные из mongodb с помощью nodejs?

#javascript #node.js #mongodb #express

#javascript #node.js #mongodb #экспресс

Вопрос:

У меня есть данные в MongoDB, как показано ниже:

 {
 "_id": "5fe1cf1230ecc74464f07c7e"
"subjects": [
    "english",
    "math",
    "social",
    "science"
  ],
}
 

Я хочу удалить отдельные данные из subject, и я пишу код, подобный приведенному ниже:

 exports.reldata = async (req, res) => {
const subject = req.body.subjects;
console.log(req.params.id);
SingleCourse.find({ _id: req.params.id }).updateOne(
{
  $pull: { subjects: [...subject] },
},
(err, doc) => {
  console.log("from pull", doc);
  }
 );
}
 

В консоли он возвращает мне сообщение об успешном завершении, как показано ниже:

 from pull { n: 1, nModified: 1, ok: 1 }
 

Но когда я смотрю в свою базу данных, данные все еще существуют там. Данные не удаляются. Пожалуйста, кто-нибудь может помочь решить мою проблему.
Я использую nodejs, express, mongodb. Я использую postman для отправки данных

Ответ №1:

Поток — это мой рабочий код

 SingleCourse.update( 
  { _id: req.params.id},
  {  $pull: { subjects: [...subject] } },
  { safe: true },
  function callback(err, obj) {
     console.log(obj);
  }
);

 

Ответ №2:

Да, $pull — это оператор обновления массива updateOne() , который, я полагаю, нельзя использовать. Нам нужно использовать .update() только. В случае, если вы хотите использовать updateOne() , вам нужно использовать оператор $set/$unset поля для изменения значений. Пожалуйста, обратитесь updateOne() к документации ниже. Первый параметр — это просто фильтр, и только второй параметр содержит обновленную информацию.

https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/

Ответ №3:

вы можете достичь желаемого результата следующим образом:

 exports.reldata = async (req, res) => {
  const subject = req.body.subjects;
  const filter = { _id: req.params.id };
  const updateDoc = {
    $set: {
      subjects: subject,
    },
  };
  const result = await SingleCourse.updateOne(filter, updateDoc);
  console.log(
    `${result.matchedCount} document(s) matched the filter, updated ${result.modifiedCount} document(s)`
  );
};