Thật không may, nó không được ghi chép đầy đủ (không đề cập đến nó trong tài liệu API Document.js), nhưng Documents có quyền truy cập vào các mô hình của chúng thông qua constructor
field - Tôi sử dụng nó mọi lúc để ghi lại mọi thứ từ các plugin, điều này cho phép tôi truy cập vào mô hình mà chúng được gắn vào.
module.exports = function readonly(schema, options) {
schema.pre('save', function(next) {
console.log(this.constructor.modelName + " is running the pre-save hook.");
// some other code here ...
next();
});
});
Đối với tình huống của bạn, bạn có thể làm:
IdeaSchema.pre('save', function(next) {
var idea = this;
function generate_slug(text) {
return text.toLowerCase().replace(/[^\w ]+/g,'').replace(/ +/g,'-').trim();
};
idea.slug = generate_slug(idea.title);
// this now works
this.constructor.findOne({slug: idea.slug}, function(err, doc) {
console.log(err);
console.log(doc);
next(err, doc);
});
//console.log(idea);
});