2017-04-13 2 views
0

Ich habe eine App mit Transaktionen (Banktransaktionen) und RepeatingTransactions (z. B. um Ihre Rechnungen jeden Monat automatisch zu bezahlen). Ich möchte ein RepeatingTransaction-Schema definieren, das über ein Transaktions-Basisfeld verfügt, das jedes Mal in die Transaktionssammlung kopiert werden kann. Ich möchte dies nicht mit Referenzen tun, da die App die Transactions-Sammlung in anderen Teilen der App verwendet. (Ich habe einige Zeit damit verbracht, die Geschäftslogik herauszufinden, und das ist gut so, ich will es nicht ändern).Mongoose - Nest Schemas ohne Refs?

Der ideale Fall wäre, wenn es eine Möglichkeit gäbe, mein Transaktionsschema an die RepeatingTransaction zu verschachteln, um Code-Duplikation zu vermeiden.

Gibt es also eine Möglichkeit, Schemas ohne Referenz zu verschachteln?

Antwort

0

Sie können dies einfach tun. Verschachteln Sie einfach Ihr Schema in Ihrem anderen Schema, es wird gut funktionieren.

Was ich falsch gemacht habe, war, dass ich versucht habe, ein Modell in mein Schema zu setzen. Um das Problem leicht in meinem ./model Ordner zu lösen habe ich ein Transaktionsmodell:

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 

);

Und ein RepeatingTransaction Modell:

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); 

Und natürlich gibt es eine TransactionSchema zu:

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

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

module.exports = TransactionSchema;