2012-11-19 15 views
18

में मैं एक subdocument पर नेवला में एक findOne क्वेरी का प्रयास कर रहा हूँ, लेकिन मैं बहुत किस्मत होने नहीं कर रहा हूँ ...findOne Subdocument नेवला

मेरे स्कीमा इस तरह दिखता है:

var Team = mongoose.Schema({ 
    teamName:  String, 
    teamURL:  String, 
    teamMembers: [{username: String, password: String, email: String, dateCreated: Date}], 
}); 

var Team = db.model('Team', Team); 

मैं बस की जरूरत है उपयोगकर्ता को उस दस्तावेज़ से ईमेल प्राप्त करें जिसमें मैं इस क्वेरी का उपयोग कर रहा हूं

Team.findOne({'teamMembers.username': 'Bioshox'}, {'teamMembers.$': 1}, function (err, team) { 
    if (team) { 
     console.log(team[1].email); 
    } 
}); 

किसी भी मदद की सराहना की जाएगी!

+0

मैं एक बहुत समान समस्या [यहाँ] है https://stackoverflow.com/ प्रश्न/44679355/कैसे-टू-गेट-सब-दस्तावेज़-केवल-इन-मोंगोस) क्या आप एक नज़र डाल सकते हैं? – Saad

उत्तर

32

आप अपने वस्तु की teamMembers स्तर वंचित हो रहे हैं तो अपने कोड कुछ इस तरह करने के लिए बदलने की जरूरत: (

Team.findOne({'teamMembers.username': 'Bioshox'}, {'teamMembers.$': 1}, 
    function (err, team) { 
     if (team) { 
      console.log(team.teamMembers[0].email); 
     } 
    } 
); 
+0

क्या आप .populate ('teamMembers') का भी उपयोग कर सकते हैं? – chovy

+0

@chovy नहीं, 'populate' केवल' ObjectId' फ़ील्ड पर काम करता है। – JohnnyHK

+4

क्या आप '{'teamMembers। $': 1}' को समझा सकते हैं या इसके बारे में दस्तावेज़ीकरण को इंगित कर सकते हैं? – chovy