Iva*_*kin 1 javascript mongoose mongodb typescript
我想使用查询助手 api定义自定义查询助手 。这里的例子:
// models/article.ts
import { Document, Schema, Model, model } from 'mongoose';
interface IArticle extends Document {
name: string;
}
interface IArticleModel extends Model<IArticle> {
someStaticMethod(): Promise<any>;
}
const ArticleSchema = new Schema( { name: String } )
ArticleSchema.query.byName = function(name) {
return this.find({ name })
}
export default model<IArticle, IArticleModel>('Article', ArticleSchema);
// routes/article.ts
import ArticleModel from '../models/article.ts'
router.get('/articles, (req, res) => {
ArticleModel.find().byName('example')
})
Run Code Online (Sandbox Code Playgroud)
byName当我将方法与默认值链接时,Typescript 会抱怨方法。
我可以把它放在IArticleModel接口中,但在那种情况下我只能从模型中调用它。
我应该把这个方法的定义放在哪里才能以可链接的方式使用它?
我已经起草了一个@types/mongoose支持查询助手的新版本。有关安装修改包的方法,请参阅此答案@types。使用我的版本,您应该能够在以下内容中写入models/article.ts:
import { Document, Schema, Model, model, DocumentQuery } from 'mongoose';
interface IArticle extends Document {
name: string;
}
interface IArticleModel extends Model<IArticle, typeof articleQueryHelpers> {
someStaticMethod(): Promise<any>;
}
const ArticleSchema = new Schema( { name: String } )
let articleQueryHelpers = {
byName(this: DocumentQuery<any, IArticle>, name: string) {
return this.find({ name });
}
};
ArticleSchema.query = articleQueryHelpers;
export default model<IArticle, IArticleModel>('Article', ArticleSchema);
Run Code Online (Sandbox Code Playgroud)
然后routes/article.ts将工作。如果这对您有用,那么我将向绝对类型上的原始包提交拉取请求。
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |