संदर्भित उप-दस्तावेज़ों को पॉप्युलेट करने के लिए, आपको उस दस्तावेज़ संग्रह को स्पष्ट रूप से परिभाषित करने की आवश्यकता है जिसका आईडी संदर्भ है (जैसे created_by: { type: Schema.Types.ObjectId, ref: 'User' }
)।
यह देखते हुए कि इस संदर्भ को परिभाषित किया गया है और आपकी स्कीमा अन्यथा अच्छी तरह से परिभाषित है, अब आप केवल populate
को कॉल कर सकते हैं हमेशा की तरह (जैसे populate('comments.created_by')
)
अवधारणा कोड का प्रमाण:
// 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);
});
अंत में ध्यान दें कि populate
केवल प्रश्नों के लिए काम करता है इसलिए आपको पहले अपने आइटम को एक क्वेरी में पास करना होगा और फिर उसे कॉल करना होगा:
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)
});
});
});