2

This is how I defined my Schema & Schema methods.

 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); 

adding items to the database and using the methods.

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"); }); }); }); }); 

The console.log(mouse) prints the first mouse document it found

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

Yet I am getting an error that this.models is not a function.

this.model is not a function.
at model.ItemSchema.methods.brandFind >(/Users/sean/ApplicationsDevelopment/sandbox.js:39:21)

1 Answer 1

2

You defined 'model' as string when you create new Schema. Just delete model:String,

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

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.