我在mongoDb中有一个数据,如下所示:
{
"_id": "5fe1cf1230ecc74464f07c7e"
"subjects": [
"english",
"math",
"social",
"science"
],
}
我想从主题中删除一个数据,我写了一个代码如下:
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。我正在使用邮递员发送数据
下面是我的工作代码
SingleCourse.update(
{ _id: req.params.id},
{ $pull: { subjects: [...subject] } },
{ safe: true },
function callback(err, obj) {
console.log(obj);
}
);
是的,$pull是一个数组更新运算符,我相信它不能与updateOne()
一起使用。我们只需要使用.update()
。如果要使用updateOne()
,则需要使用$set/$unset
字段运算符来修改值。请参阅以下updateOne()
文档。第一个参数只是一个过滤器,只有第二个参数携带更新的信息。
https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/
您可以实现您想要的结果,如下所示:
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)`
);
};