2017-04-13 1 views
0

거래 (은행 거래) 및 반복 거래 (예 : 매월 자동으로 청구서를 지불)가 포함 된 앱이 있습니다. 내가해야 할 때마다 Transaction 컬렉션으로 복사 할 수있는 기본 Transaction 필드를 가진 RepeatingTransaction Schema를 정의하고 싶다. 앱이 다른 부분의 Transactions 컬렉션을 사용하기 때문에 나는 이것을 참고로하고 싶지 않다. (비즈니스 로직을 파악하는 데 시간을 할애했는데,이 방법이 좋았습니다. 변경하고 싶지 않습니다.)몽구스 - ref가없는 Nest 스키마?

코드 복제가 발생하지 않도록 RepeatingTransaction에 트랜잭션 스키마를 중첩하는 방법이 있다면 이상적인 경우입니다.

참조없이 스키마를 중첩 할 수있는 방법이 있습니까?

답변

0

이 작업을 간단하게 수행 할 수 있습니다. 다른 스키마 안에 스키마를 중첩하면 정상적으로 작동합니다.

내가 잘못한 것은 모델을 내 스키마에 넣으려고했다는 것입니다. 내 ./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;