mongoose“this.model不是一个函数”

这是我如何定义我的模式和架构方法。

const Schema = mongoose.Schema; const ItemSchema = new Schema({ type:String, brand:String, description:String, model:String, price:Number, createdAt:{type: Date, default: Date.now}, updatedAt:{type: Date, default: Date.now} }); ItemSchema.statics.findBrand = function(brand, callback){ // this == item return this.find({brand: brand}, callback); } ItemSchema.statics.findType = function(type, callback){ return this.find({type: type}, callback); } ItemSchema.methods.findSameBrand = function(cb){ return this.model("Item").find({brand: this.brand}, cb); } var Item = mongoose.model("Item", ItemSchema); 

将项目添加到数据库并使用这些方法。

 Item.remove({}, function(err) { if (err) console.error(err); Item.create(itemData, function(err, items) { if(err) console.error(err); Item.findOne( {type: "Mouse"}, function(err, mouse){ console.log(mouse); mouse.findSameBrand( (err, items) => { if (err) console.error(err); //any code db.close( () => { console.log("connection closed"); }); }); }); }); 

console.log(鼠标)打印find的第一个鼠标文档

 { _id: 598907ecbf5ac40b24346028, type: 'Mouse', brand: 'Corsair', description: '2', model: 'G104', price: 8000, } 

但是我得到一个错误,this.models不是一个函数。

this.model不是一个函数。
at model.ItemSchema.methods.brandFind>(/ Users / sean / ApplicationsDevelopment / sandbox.js:39:21)

您在创build新架构时将“模型”定义为string。 只要删除model:String,

http://mongoosejs.com/docs/models.html