Poll
模型设为:
var Poll = new Schema({
title: {
type: String,
required: true
},
options: [{text:String, count: {type: Number, default: 0}}],
author: {
type: Schema.ObjectId,
ref: 'Account',
},
disabled: {
type:Boolean,
default: false,
},
date: {type: Date, defalut: Date.now},
});
我将此Log模型设为:
var Log = new Schema({
ip: String,
voter: {
type: Schema.ObjectId,
ref: 'Account'
},
poll: {
type: Schema.ObjectId,
ref: 'Poll'
},
date: {type: Date, defalut: Date.now},
});
每次用户投票时,日志都会创建如下内容:
{ ip: '::1',
voter: 5824e7c3b6e659459818004f,
poll: 58264b48f767f2270452b5cb,
_id: 58264b4cf767f2270452b5ce }
现在,如果用户删除了他的一个民意调查,比如58264b48f767f2270452b5cb
,我还想删除其中包含相同民意调查ID的所有日志文件。
我读了一些其他的答案,并提出了
的中间件Poll.pre('remove', function(next){
var err = new Error('something went wrong');
this.model('Log').remove({poll: this._id}, function(err){
if (err) throw err;
})
next(err);
});
但它根本不起作用。
我该怎么办?感谢。
答案 0 :(得分:0)
在当前状态Model.remove()
来电不要使用挂钩,为什么?因为在调用时文档无法存在于内存中,所以首先查询mongo然后删除文档以确保钩子正常工作是必要的。
有一个CR用于添加此行为但尚未实现。
所以目前的方法是使用类似的东西:
myDoc.remove();
一个例子,这不会起作用:
var myAccount = new Account({
name: "jim"
})
var myPoll = new Poll({
question: "You like stuff?"
})
var myLog = new Log({
voter: myAccount,
poll: myPoll
})
myAccount.save()
.then(myPoll.save())
.then(myLog.save())
.then(Poll.remove({
question: "You like stuff?"
}, function(err) {
console.log(err)
}))
这将改为:
myAccount.save()
.then(myPoll.save())
.then(myLog.save())
.then(myPoll.remove(function(err) {
console.log(err)
}))