首页 > 解决方案 > Mongoose:使用其他模型的模式

问题描述

我有一个模型“模板”

var Schema = new mongoose.Schema({
tId: { type: Number, unique: true },
type: {
    type: String, required: true},
devName: { type: String, required: true, trim: true },
subject: { type: String, required: true, trim: true },
});

module.exports = mongoose.model('Template', schema, "template");

我想在另一个模型中维护它的历史,'TemplateHistory' 我不想再次将架构写成,

var HistorySchema = new mongoose.Schema({
id: number,
template:{
    tId: { type: Number, unique: true },
    type: {
        type: String, required: true},
    devName: { type: String, required: true, trim: true },
    subject: { type: String, required: true, trim: true }
}
});

如何在上面的 HistorySchema 中使用我的模板模式?

标签: node.jsmongodbexpressmongoosemongoose-schema

解决方案


尝试像这样映射它

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

var HistorySchema = new mongoose.Schema({
id: number,
templateId: { type: Schema.Types.ObjectId, ref: 'Template', required: true }

});
//add virtual 

HistorySchema.set('toObject', { virtuals: true });
HistorySchema.set('toJSON', { virtuals: true });

HistorySchema.virtual('template', {
    ref: 'Employee',
    localField: 'templateId',
    foreignField: '_id',
    justOne: true
});

在您的服务或控制器中:

HistorySchema
.find({})
.populate('template')
.exec( function(err, history)
    {
      res.json(history); // history[0].template
    });

推荐阅读