私はMongooseを使用してPerson
とTransaction
コレクションをモデル化しています。それぞれのTransaction
は2つの異なる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
のコレクションを持たせたいの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をリレーショナルデータベースのように使いすぎていますか?各Person
インスタンスに関連付けられたTransaction
のコレクションを持つ代わりに、Translation
コレクションを直接クエリするだけでいいですか?
ありがとうございます。
muchos!ちょうど私が読む必要があった –
これは、保存前または保存後にこれを行う方が良いですか?検証エラーまたはその他のエラーのためにトランザクションが保存されない場合はどうなりますか。あなたはダミーアイテムを直接追加していませんか?ポストセーブでこれを行うと、トランザクションを再度クエリする必要はありません – raju