Để điền các tài liệu con được tham chiếu, bạn cần xác định rõ ràng tập hợp tài liệu mà ID tham chiếu đến (như created_by: { type: Schema.Types.ObjectId, ref: 'User' }
).
Do tham chiếu này được xác định và lược đồ của bạn cũng được xác định rõ ràng, bây giờ bạn có thể chỉ cần gọi populate
như thường lệ (ví dụ:populate('comments.created_by')
)
Bằng chứng về mã khái niệm:
// Schema
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
name: String
});
var CommentSchema = new Schema({
text: String,
created_by: { type: Schema.Types.ObjectId, ref: 'User' }
});
var ItemSchema = new Schema({
comments: [CommentSchema]
});
// Connect to DB and instantiate models
var db = mongoose.connect('enter your database here');
var User = db.model('User', UserSchema);
var Comment = db.model('Comment', CommentSchema);
var Item = db.model('Item', ItemSchema);
// Find and populate
Item.find({}).populate('comments.created_by').exec(function(err, items) {
console.log(items[0].comments[0].created_by.name);
});
Cuối cùng lưu ý rằng populate
chỉ hoạt động cho các truy vấn, vì vậy trước tiên bạn cần chuyển mục của mình vào một truy vấn và sau đó gọi nó:
item.save(function(err, item) {
Item.findOne(item).populate('comments.created_by').exec(function (err, item) {
res.json({
status: 'success',
message: "You have commented on this item",
comment: item.comments.id(comment._id)
});
});
});