2017-04-13 88 views
0

我有一个交易(银行交易)和重复交易(例如自动支付您的账单每月)的应用程序。我想定义一个RepeatingTransaction模式,它有一个基本的Transaction字段,每次必须完成时它都可以复制到Transaction集合中。我不想这样做,因为应用程序在应用程序的其他部分使用Transactions集合。 (我花了一些时间弄清楚业务逻辑,这种方式很好,我不想改变它)。猫鼬巢模式没有参考?

理想的情况是,如果有办法将我的Transaction模式嵌套到RepeatingTransaction以避免代码重复。

那么有没有办法嵌套架构没有参考?

回答

0

你可以简单地做到这一点。只需将您的Schema嵌入到其他Schema中,它就可以正常工作。

我做错了什么是我试图把模型放入我的模式。轻松解决问题,我./model文件夹我有一个交易模型:

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
const TransactionSchema = require('./schemas/transaction-schema'); 

TransactionSchema.pre('save', function (next) { 
    this.createdAt = new Date(); 
    next(); 
}); 

module.exports = mongoose.model('Transaction', TransactionSchema 

);

并有RepeatingTransaction模型:

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
const TransactionSchema = require('./schemas/transaction-schema'); 

let RepeatingTransactionSchema = new Schema({ 
    user: {type: Schema.Types.ObjectId, ref: 'User'}, 
    transaction: {type: TransactionSchema, required: [true, 'Transation is required']}, 
    period: {type: String, required: [true, 'Interval is required']}, 
    nextDate: {type: Date, required: [true, 'Date is required']} 
}); 

module.exports = mongoose.model('RepeatingTransaction', RepeatingTransactionSchema); 

当然还有一个TransactionSchema太:

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

let TransactionSchema = new Schema({ 
    ... 
}); 

module.exports = TransactionSchema;