在打字稿中用子文档描述猫鼬模型

Describing a mongoose model with sub-document in typescript

本文关键字:描述 文档 模型      更新时间:2023-09-26

嗨,我是Typescript的新手,我正在尝试用Typescript中的子文档描述一个猫鼬模型。

如果我在下面有一个示例模型:

var mongoose = require("mongoose");
var ResponseItemSchema = new mongoose.Schema({
    question : String,
    questionChoice : [String],
    choiceType: String,
    hidden  : Boolean,
    adLogic : { skipTo: String, skipOn: String}
});

var AdInstanceSchema  = new mongoose.Schema({  
  adMsg   : {type: String, required: true},
  responseSet : [ResponseItemSchema],
  modified_dt: { type: Date, default: Date.now },
  created_dt: Date
});
var CustomerAdSchema  = new mongoose.Schema({  
  customerId   : {type: mongoose.Schema.Types.ObjectId,
                 ref: 'CustomerSchema', required: true},
  adName  : {type: String, rquired: true, index:true},
  ad :    [AdInstanceSchema],
  msg : {type: String, default: 'Thankyou.'},
  modified_dt: { type: Date, default: Date.now },
  created_dt: Date
});

我知道当一个模式没有子文档时如何做到这一点。我怎么把它描述成一个typescript类呢?

ResponseItemSchema为例,完整的模式和类型定义如下:

var ResponseItemSchema = new mongoose.Schema({
    question : String,
    questionChoice : [String],
    choiceType: String,
    hidden  : Boolean,
    adLogic : { skipTo: String, skipOn: String}
});
export interface IResponseItem extends mongoose.Document {
    question: string;
    questionChoice: Array<string>;
    choiceType: string;
    hidden: boolean;
    adLogic: {
        skipTo: string,
        skipOn: string
    }
}
export interface IResponseItemModel extends mongoose.Model<IResponseItem> {
}
export var ResponseItem: IResponseItemModel = <IResponseItemModel>mongoose.model<IResponseItem>('ResponseItem', ResponseItemSchema);

在你的其他源文件中,你现在可以像这样导入和使用它:

import {ResponseItem, IResponseItem, IResponseItemModel} from '../schemas/responseitem.schema';
mongoose.connect(`mongodb://${user}:${password}@localhost/${db}`);
// find
ResponseItem.find({"adLogic.skipTo": "someValue"}).exec((err, item: IResponseItem) => {
    // ...
});
// create
let responseItem: IResponseItem = new ResponseItem();
responseItem.question = "Will this work?";
responseItem.save((err, item: IResponseItem) => {
    // ...
});