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

时间:2016-09-15 04:42:32

标签: javascript mongodb angular typescript mongoose

您好我是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
});

我理解当模式没有子文档时如何执行此操作。 我如何将其描述为typescipt类?

1 个答案:

答案 0 :(得分:0)

例如,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) => {
    // ...
});