2017-04-13 1 views
0

J'ai une application avec Transactions (transactions bancaires) et RepeatingTransactions (par exemple pour payer automatiquement vos factures tous les mois). Je veux définir un schéma RepeatingTransaction qui a un champ de transaction de base qu'il peut copier dans la collection Transaction chaque fois qu'il doit être fait. Je ne veux pas faire cela avec des références puisque l'application utilise la collection de transactions dans d'autres parties de l'application. (J'ai passé du temps à comprendre la logique métier et c'est bon comme ça, je ne veux pas le changer).Mangouste - Schémas de nid sans ref?

Le cas idéal serait s'il existait un moyen d'imbriquer mon schéma de transaction à la transaction Repeating pour éviter la duplication de code.

Y a-t-il un moyen d'imbriquer des schémas sans référence?

Répondre

0

Vous pouvez le faire simplement. Il suffit d'imbriquer votre schéma dans votre autre schéma, cela fonctionnera bien. Ce que j'ai mal fait, c'est que j'ai essayé de mettre un Modèle dans mon schéma. Pour résoudre le problème facilement dans mon dossier ./model j'ai un modèle de transaction:

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 

);

Et un modèle 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); 

Et bien sûr, il y a une TransactionSchema aussi:

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

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

module.exports = TransactionSchema;