mongoose
आम की आबादी
खोज…
वाक्य - विन्यास
- Model.Query.populate (पथ, [चयन], [मॉडल], [मैच], [विकल्प]);
पैरामीटर
| परम | विवरण |
|---|---|
| पथ | स्ट्रिंग - आबादी के लिए फ़ील्ड कुंजी |
| चुनते हैं | ऑब्जेक्ट, स्ट्रिंग - जनसंख्या क्वेरी के लिए फ़ील्ड चयन। |
| नमूना | मॉडल - संदर्भित मॉडल का उदाहरण |
| मेल खाते हैं | वस्तु - स्थितियों को आबाद करें |
| विकल्प | ऑब्जेक्ट - क्वेरी विकल्प |
सरल आबादी
अन्य संग्रह से संदर्भित दस्तावेजों के लिए डेटा दिखाने के लिए Mongoose आबादी का उपयोग किया जाता है।
आइए कहते हैं कि हमारे पास एक Person मॉडल है जिसने Address नामक दस्तावेजों को संदर्भित किया है।
व्यक्ति मॉडल
var Person = mongoose.model('Person', {
fname: String,
mname: String,
lname: String,
address: {type: Schema.Types.ObjectId, ref: 'Address'}
});
पता मॉडल
var Address = mongoose.model('Address', {
houseNum: String,
street: String,
city: String,
state: String,
country: String
});
यह ObjectId का उपयोग करते हुए Person अंदर Address को आबाद करने के लिए, आइए findOne() उपयोग करते हुए, populate() फ़ंक्शन का उपयोग करें और पहले पैरामीटर के रूप में फ़ील्ड कुंजी address जोड़ें।
Person.findOne({_id: req.params.id})
.populate('address') // <- use the populate() function
.exec(function(err, person) {
// do something.
// variable `person` contains the final populated data
});
या
Person.findOne({_id: req.params.id}, function(err, person) {
// do something
// variable `person` contains the final populated data
})
.populate('address');
ऊपर दिए गए क्वेरी को नीचे दस्तावेज़ का उत्पादन करना चाहिए।
व्यक्ति डॉक्टर
{
"_id":"123abc",
"fname":"John",
"mname":"Kennedy",
"lname":"Doe",
"address":"456def" // <- Address' Id
}
पता डॉक
{
"_id":"456def",
"houseNum":"2",
"street":"Street 2",
"city":"City of the dead",
"state":"AB",
"country:"PH"
}
आबाद आबादी
{
"_id":"123abc",
"fname":"John",
"mname":"Kennedy",
"lname":"Doe",
"address":{
"_id":"456def",
"houseNum":"2",
"street":"Street 2",
"city":"City of the dead",
"state":"AB",
"country:"PH"
}
}
कुछ क्षेत्रों की उपेक्षा करें
मान लें कि आप फ़ील्ड नहीं चाहते हैं और अंतिम आबादी वाले address क्षेत्र में houseNum और street , populate() उपयोग करें populate() रूप में,
Person.findOne({_id: req.params.id})
.populate('address', '-houseNum -street') // note the `-` symbol
.exec(function(err, person) {
// do something.
// variable `person` contains the final populated data
});
या
Person.findOne({_id: req.params.id}, function(err, person) {
// do something
// variable `person` contains the final populated data
})
.populate('address', '-houseNum -street'); // note the `-` symbol
यह निम्नलिखित अंतिम आबादी वाले डॉक्टर का उत्पादन करेगा,
आबाद आबादी
{
"_id":"123abc",
"fname":"John",
"mname":"Kennedy",
"lname":"Doe",
"address":{
"_id":"456def",
"city":"City of the dead",
"state":"AB",
"country:"PH"
}
}
केवल कुछ क्षेत्रों को आबाद करें
आप केवल क्षेत्रों चाहते हैं houseNum और street में address अंतिम आबादी वाले दस्तावेज़ में क्षेत्र, का उपयोग populate() दो तरीकों से ऊपर में इस प्रकार समारोह,
Person.findOne({_id: req.params.id})
.populate('address', 'houseNum street')
.exec(function(err, person) {
// do something.
// variable `person` contains the final populated data
});
या
Person.findOne({_id: req.params.id}, function(err, person) {
// do something
// variable `person` contains the final populated data
})
.populate('address', 'houseNum street');
यह निम्नलिखित अंतिम आबादी वाले डॉक्टर का उत्पादन करेगा,
आबाद आबादी
{
"_id":"123abc",
"fname":"John",
"mname":"Kennedy",
"lname":"Doe",
"address":{
"_id":"456def",
"houseNum":"2",
"street":"Street 2"
}
}
नेस्टेड जनसंख्या
contactNo कि आपके पास एक user स्कीमा है, जिसमें name , contactNo , address और friends ।
var UserSchema = new mongoose.Schema({
name : String,
contactNo : Number,
address : String,
friends :[{
type: mongoose.Schema.Types.ObjectId,
ref : User
}]
});
यदि आप एक उपयोगकर्ता, उसके दोस्तों और दोस्तों के दोस्तों को खोजना चाहते हैं, तो आपको 2 स्तरों यानी नेस्टेड जनसंख्या पर जनसंख्या करने की आवश्यकता है।
दोस्तों और दोस्तों के दोस्त खोजने के लिए:
User.find({_id : userID})
.populate({
path : 'friends',
populate : { path : 'friends'}//to find friends of friends
});
सभी parameters और options के populate नेस्टेड रूप से भरें अंदर भी इस्तेमाल किया जा सकता, वांछित परिणाम प्राप्त करने के लिए।
इसी तरह, आप अपनी आवश्यकता के अनुसार अधिक levels को populate कर सकते हैं।
3 से अधिक स्तरों के लिए नेस्टेड आबादी को करने की अनुशंसा नहीं की जाती है। यदि आपको 3 से अधिक स्तरों के लिए नेस्टेड पॉपुलेट करने की आवश्यकता है, तो आपको अपने स्कीमा का पुनर्गठन करने की आवश्यकता हो सकती है।