Tôi đang sử dụng để mô hình Mongoose Person
và Transaction
bộ sưu tập, trong đó mỗi Transaction
sẽ phải tham chiếu đến hai Person
trường hợp khác nhau:Mongoose: Làm thế nào để mô hình hóa một mối quan hệ nghịch đảo/nghịch đảo?
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]
});
Tôi muốn mỗi Person
để có một bộ sưu tập của tất cả các s Transaction
rằng họ là hoặc giá trị to
hoặc from
cho. Cho đến nay, đây là cách tốt nhất mà tôi có thể tìm ra cách thực hiện:
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();
});
Điều này có vẻ quá mức. Có cách nào tốt hơn để làm điều đó, hoặc tôi đang cố gắng sử dụng MongoDB quá nhiều như một cơ sở dữ liệu quan hệ? Thay vì có một bộ sưu tập gồm Transaction
s được liên kết với từng cá thể Person
, tôi có nên truy vấn trực tiếp bộ sưu tập Translation
không?
Cảm ơn bạn.
nhiều điều! chỉ muốn tôi cần đọc –
Làm tốt hơn để thực hiện việc này trước khi lưu hoặc lưu sau. Điều gì sẽ xảy ra nếu giao dịch không được lưu do lỗi xác thực hoặc bất kỳ lỗi nào khác. Bạn sẽ không chỉ cần thêm mục giả vào người? Nếu bạn làm điều này trong bài tiết kiệm bạn không bạn sẽ phải truy vấn cho giao dịch một lần nữa – raju