आप जो करने की कोशिश कर रहे हैं वह संभव नहीं है क्योंकि मोंगोडब पर कोई जॉइन स्टेटमेंट नहीं है।
आप इसे दो तरीकों से हासिल कर सकते हैं:
1 - DBRefs द्वारा: अपनी स्कीमा को एक में बदलना जिसमें सभी उपयोगकर्ता जानकारी शामिल हो और उन्हें दो अलग-अलग स्कीमा में विभाजित न करें जैसा कि आप कर रहे हैं, देखें असामान्यीकृत . फिर आप जनसंख्या का उपयोग कर सकते हैं सभी व्यक्तियों का डेटा प्राप्त करने के लिए कार्य करता है।
2 - मैन्युअल संदर्भों द्वारा: दूसरा समाधान डेटाबेस को दूसरी कॉल करना है जो उपयोगकर्ता प्रोफ़ाइल डेटा को फ़िल्टर के रूप में उपयोगकर्ता आईडी का उपयोग कर प्राप्त कर रहा है।
उदाहरण 1:
इस तरह आप डेटाबेस में दूसरी कॉल के बिना सभी व्यक्तियों का डेटा प्राप्त कर सकते हैं।
var personSchema = Schema({
_id : Number,
name : String,
birthday: Date,
profilelink: String,
email: String
});
var storySchema = Schema({
_creator : { type : Schema.Types.ObjectId, ref: 'Person' },
title : String
});
Story
.find()
.populate(['_creator'])
.exec(function(err, stories) {
//do your stuff here
}
ध्यान दें कि मैं Schema.Types.ObjectId . प्रकार का उपयोग कर रहा हूं न कि संख्या . इस तरह, आप _creator . को एक नया मान निर्दिष्ट कर सकते हैं _id . में से किसी एक को पास करना या व्यक्ति वस्तु और नेवला वस्तु को उसकी _id में बदल देगा। उदाहरण के लिए, आप कुछ इस तरह पोस्ट कर सकते हैं
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: '[email protected]'
},
title : 'Mr'
}
... और नेवला बदल जाएगा
{
_creator : 123123123123,
title : 'Mr'
}
उदाहरण 2:
इस तरह आपका डेटा अभी भी सामान्य हो गया है और आप दूसरी कॉल के साथ सभी व्यक्तियों का डेटा प्राप्त कर सकते हैं।
Story
.find()
.exec(function(err, stories) {
var arrayLength = stories.length;
for (var i = 0; i < arrayLength; i++) {
var story = stories[i];
personProfile.findById(story._creator, function (err, person) {
story._creator = person;
}
};
// do your stuff here
}