Hãy tưởng tượng tôi có các mô hình sau:Mongoose populating con đường với nhiều subpath
# MODEL A
schemaA = mongoose.Schema
_bId:
type: mongoose.Schema.Types.ObjectId
ref: "B"
# MODEL B
schemaB = mongoose.Schema
_cId:
type: mongoose.Schema.Types.ObjectId
ref: "C"
_dId:
type: mongoose.Schema.Types.ObjectId
ref: "D"
# MODEL C
schemaC = mongoose.Schema
_eId:
type: mongoose.Schema.Types.ObjectId
ref: "E"
Mẫu D và E không có bất kỳ tài liệu tham khảo đối tượng khác và vì lợi ích của sự thuận tiện do đó không được liệt kê được nữa.
Phương pháp hay nhất để điền mô hình "A" với tất cả các tham chiếu là gì? Hiện nay tôi giải quyết nhiệm vụ này như sau (đây là một ví dụ-phương pháp, vì tôi cần nó khá thường xuyên):
schemaA.methods =
populateAll: (cb) ->
@
.populate
path: "_bId"
model: "B"
populate:
path: "_cId"
model: "C"
populate:
path: "_eId"
model: "E"
, (error) =>
return cb error, @ if error?
D.findById @._bId._dId
.exec (error, d) =>
return cb error, @ if error?
@._bId._dId = d
return cb error, @
Đây là cách duy nhất tôi tìm thấy để cư tất cả các tài liệu tham khảo vì Populating nhiều đường với sau đó lại nhiều đường trong các mô hình khác nhau là khá khó khăn. Tôi đã cố gắng một giải pháp như hình dưới đây nhưng như người ta có thể tưởng tượng, nó chỉ sẽ ghi đè lên các quần thể theo thời gian:
@
.populate
path: "_bId"
model: "B"
populate:
path: "_cId"
model: "C"
populate:
path: "_eId"
model: "E"
.populate
path: "_bId"
model: "B"
populate:
path: "_dId"
model: "D"