在MongoDB中使用Mongoose ORM
我已经声明了一个猫鼬静态方法,例如:
ConvoDataSchema.statics.randomItem = async function () { ... }
然后使用该模型创建模型
const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)
但是稍后我想调用该方法时:
let convoData = await ConvoData.randomItem()
我的小狮子不知道ConvoData
曾被猫鼬修补过这种神奇的方法。
如何声明这些方法,以便Linter(TSLint / VSCode Intellisense)可以正确发现这些方法?
答案 0 :(得分:0)
如果完全这样声明:
ConvoDataSchema.statics.randomItem = async function () {
const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)
由于该方法未关闭,因此无法使用。您应该尝试关闭该方法。 此外,该方法返回的确切是什么,这样我们就可以正确调试该方法。
答案 1 :(得分:0)
我认为您可以告诉ESLint这样的“忽略”行,或者您会变得很奇怪并执行以下操作:
let convoData = await ConvoDataSchema.statics.randomItem.call(ConvoData)
很遗憾,这两种解决方案都不像我确定的那样优雅。
答案 2 :(得分:0)
查看文档,我发现:https://mongoosejs.com/docs/guide.html#statics
请勿使用ES6箭头函数(=>)声明静态变量。箭头函数明确阻止绑定 this ,因此,由于 this 的值,上述示例将不起作用。“
这是你的问题吗?
答案 3 :(得分:0)
现在,我在大多数项目中都使用打字稿,由于上述原因以及更多原因,猫鼬无法获得不错的智能感知,我的解决方案是不使用猫鼬...