आप जो चाहते हैं उसका सरलीकृत संस्करण यहां दिया गया है।
सेटअप करने के लिए बुनियादी डेटा, पहले "छात्र":
{
"_id" : ObjectId("53aa90c83ad07196636e175f"),
"name" : "Bill",
"rollNo" : 1,
"class" : 12
},
{
"_id" : ObjectId("53aa90e93ad07196636e1761"),
"name" : "Ted",
"rollNo" : 2,
"class" : 12
}
और फिर "टीम" संग्रह:
{
"_id" : ObjectId("53aa91b63ad07196636e1762"),
"name" : "team1",
"lead" : "me",
"students" : [
{
"block" : 1,
"status" : "Y",
"student" : ObjectId("53aa90c83ad07196636e175f")
},
{
"block" : 2,
"status" : "N",
"student" : ObjectId("53aa90e93ad07196636e1761")
}
]
}
आप इसे इस तरह से करते हैं:
var async = require('async'),
mongoose = require('mongoose');
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/team');
var teamSchema = new Schema({
name: String,
lead: String,
students: [{
block: Number,
status: String,
student: {
type: Schema.ObjectId, ref: 'Student'
}
}]
});
var studentSchema = new Schema({
name: String,
rollNo: Number,
class: Number
});
var Team = mongoose.model( "Team", teamSchema );
var Student = mongoose.model( "Student", studentSchema );
Team.findById("53aa91b63ad07196636e1762")
.select('students')
.exec(function(err, team) {
console.log( team );
async.forEach(team.students, function(student,callback) {
Student.populate(
student,
{ "path": "student" },
function(err,output) {
if (err) throw err;
callback();
}
);
},function(err) {
console.log( JSON.stringify( team, undefined, 4 ) );
});
});
और यह आपको परिणाम देता है:
{
"_id": "53aa91b63ad07196636e1762",
"students": [
{
"block": 1,
"status": "Y",
"student": {
"_id": "53aa90c83ad07196636e175f",
"name": "Bill",
"rollNo": 1,
"class": 12
}
},
{
"block": 2,
"status": "N",
"student": {
"_id": "53aa90e93ad07196636e1761",
"name": "Ted",
"rollNo": 2,
"class": 12
}
}
]
}
आपको वास्तव में "async" मॉड्यूल की आवश्यकता नहीं है, लेकिन मैं बस "आदत में" हूं जैसा कि यह था। यह "ब्लॉक" नहीं करता है इसलिए मैं इसे बेहतर मानता हूं।
तो जैसा कि आप देख सकते हैं, आप आरंभिक .populate()
कॉल कुछ भी नहीं करता है क्योंकि यह एक _id
. से "कुंजी" बंद करने की अपेक्षा करता है एक सरणी इनपुट से विदेशी संग्रह में मूल्य जो यह "कड़ाई से बोल रहा है" ऐसा नहीं है क्योंकि "कुंजी" "विदेशी कुंजी" वाले "छात्र" पर है।
मैंने वास्तव में इसे एक यहां हाल के उत्तर में कवर किया था। , शायद आपकी स्थिति के लिए बिल्कुल विशिष्ट नहीं है। ऐसा लगता है कि आपकी खोज से सही "समान उत्तर" नहीं मिला (हालांकि बिल्कुल नहीं) जिससे आप संदर्भ प्राप्त कर सकें।