如何在mongoose的实例方法中访问静态方法?

15

如何在mongoose中从实例方法访问静态方法?

我有一个名为Job的工作模型。从实例方法job.start中,我想调用静态方法Job.someStatic()。我如何从实例方法中的"this"获取对Job的引用?

谢谢

2个回答

33

我找到的唯一通用方法(不只是调用Job.someStatic())是:

this.model(this.constructor.modelName).someStatic();

更新 感谢 @numbers1311407 提供的信息:

我不确定是否一直如此,但至少从 Mongoose 3.6.11 开始,你可以将它缩短为:

this.constructor.someStatic();

Mongoose 4.x 更新

这个在4.4.12版本中仍然有效。


我没有访问那个静态变量的权限。但是你的方法也可以运行。我希望有更短的语法,但我可以接受它。如果你想到更紧凑的方法,请告诉我。 - Totty.js
4
这个表达式 this.constructor === this.model(this.constructor.modelName) 是不是成立的? - numbers1311407
从动态方法中调用 Job.someStatic() 对我来说甚至都不起作用... 不过 this.constructor 指针是正确的! - pronebird
我也有同样的问题,但这个答案中提到的解决方案在Mongoose 4.4.x上不起作用。有人知道如何在较新的Mongoose版本中解决吗? - Martijn
1
@Martijn,我刚刚使用Mongoose 4.4.12进行了测试,它可以正常工作。如果您无法使其正常工作,最好发布一个新问题来询问。 - JohnnyHK
显示剩余2条评论

1
另一种访问静态文件的选项是:

this.schema.statics.someStatic()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接