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

Posted

技术标签:

【中文标题】用打字稿中的子文档描述猫鼬模型【英文标题】:Describing a mongoose model with sub-document in typescript 【发布时间】:2017-01-23 00:23:49 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

仍然不理解反对意见 - 这个答案到底有什么问题?

以上是关于用打字稿中的子文档描述猫鼬模型的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中使用猫鼬填充查询

将文档推送到猫鼬模型数组中的子文档中

使用打字稿创建猫鼬模型 - 子文档

如何在打字稿中的猫鼬userschema.methods中使用“this”

在带有 loadClass 的打字稿中使用 es6 类和猫鼬

使用猫鼬模型设置打字稿