我有两种模式:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ProjectSchema = new Schema({
title: { type: String },
images: [{
type: Schema.Types.ObjectId,
ref: 'Image'
}]
});
module.exports = mongoose.model('Project', ProjectSchema);
和
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ImageSchema = new Schema({
fileName: { type: String },
fileSize: { type: Number }
});
module.exports = mongoose.model('Image', ImageSchema);
现有项目填写图像如下:
Project.findById(req.params.project_id, function(err, project) {
if (err) { res.status(400).send(err); }
var image = new Image({
fileName: req.file.name,
fileSize: req.file.size
});
image.save(function(err) {
if (err) { res.status(400).send(err); }
project.images.push(image);
project.save();
);
});
从项目中获取图像没有问题:
Project.findById(req.params.project_id)
.populate('images')
.exec(function(err, project) {
if (err) { res.status(400).send(err); }
res.status(200).json(project.images);
});
我尝试使用Mongoose文档从故事中删除图像: http://mongoosejs.com/docs/subdocs.html http://mongoosejs.com/docs/api.html#types_documentarray_MongooseDocumentArray.id
Project
.findById(req.params.project_id)
.populate('images')
.exec(function(err, project) {
if (err) { res.status(400).send(err); }
project.images.id(req.params.image_id).remove();
project.save();
});
但我不断收到错误:
/api-server/app/admin/images/index.js:170 project.images.id(req.params.image_id).remove(); ^ TypeError: project.images.id is not a function
我在这里寻找解决方案,但我从2013年开始只收取了一些东西。 .id()方法是否被破坏,或者我做错了什么。 因为我对猫鼬来说相当新,有没有办法更好地做到这一点?
答案 0 :(得分:0)
您只需要从数据库中删除图像。我希望以下代码可以帮助您。
Project
.findById(req.params.project_id)
.exec(function(err, project) {
if (err) { res.status(400).send(err); }
project.save();
Image.remove({"_id":project.images._id},function(){})
});
答案 1 :(得分:0)
您可以使用findByIdAndUpdate
和$pull
删除子文档。
将选项设置为{new: true}
会覆盖现有文档
var fieldsToRemove= {
$pull: {
images: {
_id: req.params.type
}
}
};
var options = { new: true };
Project.findByIdAndUpdate(req.params.project_id, fieldsToRemove, options,
function(err, project) {...
它将删除指定为_id