Mongoose - 没有引用的嵌套模式?

Mongoose - Nest schemas without refs?

我有一个带有交易(银行交易)和重复交易(例如每月自动支付账单)的应用程序。我想定义一个 RepeatingTransaction Schema,它有一个基本的 Transaction 字段,它可以在每次必须完成时复制到 Transaction 集合。我不想对引用执行此操作,因为应用程序在应用程序的其他部分使用事务集合。 (我花了一些时间弄清楚业务逻辑,这样很好,我不想改变它)。

理想的情况是,如果有一种方法可以将我的事务架构嵌套到 RepeatingTransaction 中以避免代码重复。

那么有没有办法在没有引用的情况下嵌套模式?

你可以简单地做到这一点。只需将您的 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;