[英]Describing a mongoose model with sub-document in 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
});
我知道當模式沒有子文檔時如何執行此操作。 我如何將其描述為typescipt類?
例如, 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) => {
// ...
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.