Mongoose: Как смоделировать внешний ключ/обратное отношение?

Я использую Mongoose для моделирования коллекций Person и Transaction, где каждая Transaction будет иметь ссылки на два разных экземпляра Person:

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 слишком похоже на реляционную базу данных? Вместо того чтобы иметь коллекцию Транзакций, связанных с каждым экземпляром Персоны, должен ли я просто напрямую запрашивать коллекцию Транзакций?

Спасибо.

5
задан Bryan Irace 30 October 2011 в 19:34
поделиться