如何删除mongoose文档并从另一个模型引用它?

我有以下模式:

const userSchema = new Schema({ email: { type: String, unique: true, lowercase: true }, password: String, favorites: [{ type: Schema.Types.ObjectId, ref: 'image' }] }) const imageSchema = new Schema({ description: String, title: String, url: String }) 

当我添加一个图像,我添加一个新的图像文档,然后我findlogin的用户,并更新他的collections夹,如下所示:

 exports.addImage = function(req, res, next) { const email = req.user.email; imageData = req.body; imageData.url = req.body.media.m; const newImg = new Image(imageData); newImg.save() .then(function(image) { User.findOneAndUpdate( { email: email }, { $push: { favorites: image._id } }, function(err, doc) { if (err) { console.error(err) } res.status(201).send(doc) }); }); } 

当我删除最喜欢的,我想删除图像,并更新用户引用的图像。 我的代码如下所示:

 exports.deleteImageById = function(req, res, next) { const email = req.user.email; const id = req.body.id; Image.findOneAndRemove({ _id: id }) .exec(function(err, removed) { User.findOneAndUpdate( { email: email }, { $pull: { favorites: { _id: id } } }, { new: true }, function(err, removedFromUser) { if (err) { console.error(err) } res.status(200).send(removedFromUser) }) }) } 

当我testing它时,图像被删除,但collections夹中的用户引用从不更新以反映更改。 这里怎么了?

没有_id访问最喜欢的素材,做这个,而不是:

 exports.deleteImageById = function(req, res, next) { const email = req.user.email; const id = req.body.id; Image.findOneAndRemove({ _id: id }) .exec(function(err, removed) { User.findOneAndUpdate( { email: email }, // no _id it is array of objectId not object with _ids { $pull: { favorites: id } }, { new: true }, function(err, removedFromUser) { if (err) { console.error(err) } res.status(200).send(removedFromUser) }) }) }