【发布时间】:2015-09-22 11:51:55
【问题描述】:
我是 mongoose 和 node 的新手,我正在使用 MEAN 堆栈(Mongo ExpressJS AngularJS Node)构建一个应用程序。
我过去使用 asp.net WebAPI 构建了很多 API,但我找不到任何关于使用 DTO 或 View Models 的文档,以减少我之间来回传输的 JSON 量服务器和我的前端。
我的申请是关于用户在线填写的调查。然后,每个答案都会被用户用来产生一个分数。
我的模型:
var UserSchema = new Schema({
email: {type: String, trim: true,default: '', match: [/.+\@.+\..+/,'']},
status: {type: String},
token:{type: String, default: crypto.randomBytes(64).toString('hex')},
score: {
managementExperience: {type: Number},
managementSkills: {type: Number},
relevantKnowledge: {type: Number},
commitment: {type: Number},
acceptanceOfChange: {type: Number},
age: {type: Number},
totalScore: {type: Number}
},
answers: [
{
optionId: {type: Schema.Types.ObjectId}
}
]
});
var SurveySchema = new Schema({
client_id:{type: Schema.Types.ObjectId, ref: 'Client' },
creationDate:{type: Date,default: Date.now},
title: {type: String, trim: true},
surveyVersion: { type: Schema.Types.ObjectId, ref: 'SurveyVersion' },
users:[UserSchema]
});
调查屏幕本身可以工作,但是在生成结果仪表板时,我想发送一个 DTO 而不是整个 SurveySchema,就像这个模型:
var SurveySchemaLight = new Schema({
client_id:{type: Schema.Types.ObjectId, ref: 'Client' },
creationDate:{type: Date,default: Date.now},
title: {type: String, trim: true},
users:[{
email: {type: String, trim: true,default: '', match: [/.+\@.+\..+/,'']},
status: {type: String}
}]
});
在 .Net 世界中,我希望这个模型有一个构造函数,该构造函数将 SurveySchema 的实例作为参数,但我找不到让它工作的方法。
我还尝试将两个 Schema 链接到 mongodb 中的同一个集合:
mongoose.model('Survey', SurveySchema);
mongoose.model('SurveyLight', SurveySchemaLight, 'surveys');
但是当我在 SurveyLight 架构上运行以下查询时,我仍然返回了来自 Survey 的所有字段:
SurveyLight.find({'client_id': req.params.clientID}).exec(function(err, surveyList){
res.json(surveyList);
});
在我的堆栈中拥有 DTO/视图模型机制的最佳实践是什么?
谢谢
【问题讨论】:
标签: node.js mongodb express mongoose