Używam Mongoose modelować Person
i Transaction
kolekcji, gdzie każdy Transaction
będą miały odniesienie do dwóch różnych Person
przypadkach:Mongoose: Jak modelować klucz obcy/odwrotną relację?
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]
});
Chciałbym każdy Person
mieć kolekcję wszystkich Transaction
s, że są one albo wartość to
lub from
dla. Jak dotąd, jest to najlepszy sposób udało mi się dowiedzieć, jak to zrobić:
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();
});
Wydaje się nadmierne. Czy istnieje lepszy sposób na to, czy próbuję użyć MongoDB zbyt wiele jak relacyjnej bazy danych? Zamiast kolekcjonowania Transaction
s skojarzonych z każdą instancją Person
, czy powinienem zapytać bezpośrednio o kolekcję Translation
?
Dziękuję.
muchos! po prostu chcę, abym przeczytał –
Czy lepiej to zrobić w pre-save lub po save. Co się stanie, jeśli transakcja nie zostanie zapisana z powodu błędów sprawdzania poprawności lub jakiegokolwiek innego błędu. Czy nie dodałeś osobiście manekina? Jeśli zrobisz to w post-save, nie będziesz musiał ponownie pytać o transakcję – raju