如何使用nodejs从mongodb中提取数据



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

最新更新