2012-10-27 10 views
26

का उपयोग करके नेस्टेड दस्तावेजों की क्वेरी करना मैं mongodb के साथ शुरू कर रहा हूं और घोंसला वाले दस्तावेज़ों से पूछने में कठोर समय ले रहा हूं।मोंगोस (मोंगोडीबी)

var LinkSchema = new mongoose.Schema({ 
    url: String, 
    name: String 
}); 

var UserSchema = new mongoose.Schema({ 
    name: String, 
    links: [LinkSchema] 
}); 

आप देख सकते हैं, मैं बस एक साधारण बुकमार्क उपकरण के निर्माण के लिए बांधने कर रहा हूँ: मैं दो स्कीमा है। प्रत्येक उपयोगकर्ता का नाम और लिंक का संग्रह होता है। प्रत्येक लिंक का नाम और यूआरएल होता है।

अब, मैं जो करने की कोशिश कर रहा हूं वह उदाहरण के लिए है, देखें कि कोई लिंक किसी के लिंक सरणी में पहले से मौजूद है या नहीं। मैं (फिर देखें कि वह क्वेरी लिंक पहले से ही है या नहीं संग्रह के अंतर्गत आता है vlad के लिंक संग्रह प्राप्त करने के लिए कोशिश कर रहा है और) कुछ इस तरह करने में सक्षम होना चाहते हैं:

app.get("/:query", function(req, res){ 
    User.findOne({"name":"vlad"}, function(err, user){ 
    user.links.find({"url":req.params.query}, function(err, foundLinks){ 
     if(foundLinks){ 
     res.send("link already exists!"); 
     } else { 
     res.send("link doesn't exist!"); 
     } 
    }); 
    }); 
}); 
बेशक

, इस कोड काम नहीं करता , क्योंकि स्पष्ट रूप से मैं "user.links.find()" नहीं कर सकता। मुझे लगता है कि मैं केवल यूआरएल निकालने के लिए user.links.map कर सकता हूं और फिर इसके खिलाफ सदस्यता क्वेरी चला सकता हूं। लेकिन मुझे लगता है कि यह सही समाधान से बहुत दूर होगा। डीबी प्रश्नों का उपयोग करके इस तरह कुछ करने के लिए एक तरीका होना चाहिए। क्या कोई मदद कर सकता है? धन्यवाद!

उत्तर

52

आप इस

User.find({'links.url':req.params.query}, function(err, foundUsers){ 
     // --- 
    }); 

की तरह एक एम्बेडेड दस्तावेज़ क्वेरी कर सकता है नेवला में और लिंक है कि उपयोगकर्ता "vlad" के हैं लगता है, तो आप

User.find({name:'vlad','links.url':req.params.query}, function(err, foundUsers){ 
     // --- 
    }); 

इस चाल करना होगा लिख ​​सकते हैं ।

+3

क्यों लौटा पैरामीटर 'मिला लिंक' है और नहीं मिला 'यूजर'? – geevee

+0

क्या आप @geevee टिप्पणी का उत्तर दे सकते हैं? –

+1

@ रेमीबेचेरास @geevee यह 'पाया यूज़र' होना चाहिए, लेकिन मैंने ओपी मूल रूप से पोस्ट किया था कोड का इस्तेमाल किया .. यह 'मिली लिंक्स' था .. आप इसे देख सकते हैं :) – RameshVel