mongoose模型静态方法的types错误

我使用node.js和MongoDb驱动程序Mongoose 3.6.1 。 这是我的模式定义:

车型/ user.js的

var mongoose = require('mongoose'), Schema = mongoose.Schema; var userSchema = new Schema({ ... }); module.exports = { model : mongoose.model('User', userSchema) }; userSchema.statics.doSomething = function () { console.log("I'm doing something"); } 

然后在一个单独的控制器,我这样做

控制器/ another.js

 var User = require("../models/user").model; function foo() { User.doSomething(); } 

我得到以下错误

 [TypeError: Object function model(doc, fields, skipId) { if (!(this instanceof model)) return new model(doc, fields, skipId); Model.call(this, doc, fields, skipId); } has no method 'doSomething'] 

但是,如果我转储User对象,我可以看到那里的方法,如预期的那样。 这是转储确认的相关部分

 ... schema: { statics: { doSomething: [Function] } ... 

任何想法,我在做什么错了?

您需要创build模型之前设置静态方法:

 userSchema.statics.doSomething = function () { var User = mongoose.model('User'); // I think 'this' also points to the User model here: // var User = this; // var user = new User(...); console.log("I'm doing something"); } module.exports = { model : mongoose.model('User', userSchema) }; 

模型使用Mongoose术语,从模式“编译”。 一旦创build了模型,对模式的任何更改都不会传播到从中派生的模型。