"this"在猫鼬中间件期间为空



这里的长期Java程序员试图找出Node.js

我正试图使用pre中间件将删除级联到子对象,但没有发生子对象删除,而父对象删除没有任何问题。让我的数据库里满是悲伤的孤儿。当我开始登录控制台时,我发现对"this"的引用是空的。在大多数情况下,这似乎是使用===>创建函数,但我没有这样做:

GameSession(父级(:

var mongoose = require('mongoose');
var TimeLineEvent = require('../models/timelineevent');
//Define a schema
var Schema = mongoose.Schema;
var GameSessionSchema = new Schema({
name: {type: String, required: true},
gameMasterId : {type: Schema.Types.ObjectId, ref: 'GameMaster', required: true},
});
GameSessionSchema.pre('findOneAndDelete', function(next) {
console.log('GameSessionSchema.pre findOneAndDelete this ='+this);
console.log('GameSessionSchema.pre findOneAndDelete id ='+this._id);
TimeLineEvent.deleteMany({gameSessionId: this._id}).exec();
next();
});
//Export function to create "SomeModel" model class
module.exports = mongoose.model('GameSessionModel', GameSessionSchema );

TimeLineEvent(子级(:

//Require Mongoose
var mongoose = require('mongoose');
//Define a schema
var Schema = mongoose.Schema;
var TimeLineEventSchema = new Schema({
name: {type: String, required: true},
gameSessionId: {type: Schema.Types.ObjectId, ref: 'GameSession', required: true},
time: {type: Number, required: true},
nextAction: {type: Number}
});
module.exports = mongoose.model('TimeLineEventModel', TimeLineEventSchema );

当调用预方法时,控制台会显示以下内容:

GameSessionSchema.pre findOneAndDelete this =[object Object]
GameSessionSchema.pre findOneAndDelete id =undefined

你能看到我缺了什么吗?谢谢

从文档中:"在查询中间件功能中,this是指查询">

如果使用console.log(this),则可以查看完整的Query对象。您可能会找到您需要的this.model参考资料。

最新更新