我正在尝试使用猫鼬从文档中的数组中删除对象。
这是条目的示例:
{
_id: "12345",
folder: {
name: "Folder1",
files: [
{
fileName: "File 1",
fileID: "6789",
folderID: "12345"
}
],
active: true
}
}
这是我目前正在从阵列中删除文件的操作。 Attachment.unlink
可以从gridfs文件存储中删除文件。该部分代码有效。但是,我的对象不会从数组中删除。
router.delete("/filesystem/:id", (req, res, next) => {
Attachment.unlink(req.params.id, (error, attachment) => {
if (!attachment) return res.status(404);
if (error) return next(error);
Folder.findByIdAndUpdate(
{
_id: req.body.folderID
},
{
$pull: {
"folder.files": {
$elemMatch: { fileID: req.params.id }
}
}
},
{ multi: true, safe: true },
(error, folder) => {
if (error) return next(error);
return res.status(200).json({
folder
});
}
);
});
});
我还尝试使用update
而不是findByIdAndUpdate
。 如何从fileID
为6789
的数组中删除对象?
答案 0 :(得分:0)
您应该可以使用array.pull
(请参阅https://mongoosejs.com/docs/api.html#mongoosearray_MongooseArray-pull)
下面是我修改您的代码并使用async / await而不是回调的示例。
router.delete("/filesystem/:id", (req, res, next) => {
Attachment.unlink(req.params.id, async (error, attachment) => {
if (!attachment) return res.status(404);
if (error) return next(error);
try {
const folder = await Folder.findById(req.body.folderID);
folder.folder.files.pull({ fileID: req.params.id });
await folder.save();
return res.status(200).json({
folder
});
} catch (error) {
return next(error);
}
});
});