我使用的貓鼬模型Person
和Transaction
集合,其中每個Transaction
將引用兩個不同Person
實例:Mongoose:如何建模一個外鍵/逆關係?
var TransactionSchema = new Schema({
, amount : { type: Number, required: true }
, from : { type: ObjectId, required: true }
, to : { type: ObjectId, required: true }
, date : Date
});
var PersonSchema = new Schema({
name : { type: String, required: true }
, transactions : [ObjectId]
});
我想每個Person
擁有的所有Transaction
s表示他們是一家集爲to
或from
值。到目前爲止,這是我已經能夠找出如何去做的最佳方式:
TransactionSchema.pre('save', function(next, done) {
var transaction = this;
Person.findById(this.to, function (err, person) {
person.transactions.push(transaction);
person.save();
});
Person.findById(this.from, function (err, person) {
person.transactions.push(transaction);
person.save();
});
next();
});
這似乎過分。有沒有更好的方法來做到這一點,或者我想像關係數據庫一樣使用MongoDB?我應該直接查詢Translation
集合,而不是收集與每個Person
實例相關的Transaction
?
謝謝。
muchos!只是想我需要閱讀 –
這是更好的做到這一點在保存前或保存後。如果由於驗證錯誤或任何其他錯誤導致事務未保存,該怎麼辦?你不會親自添加虛擬物品嗎?如果您在保存後進行此操作,則不必再次查詢事務 – raju