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