मैं उन सभी उपयोगकर्ताओं को खोजने के लिए मोंगो डीबी में एक कुशल क्वेरी बनाना चाहता हूं, जिनके उपयोगकर्ता उपयोगकर्ता समूह में सूचीबद्ध उपयोगकर्ता हैं। आदर्श रूप में मैं इसे मोंगोद को एक ही अनुरोध के रूप में बनाना चाहता हूं। जो मैं चाहता हूं वह SQL में नेस्टेड चयनों के अनुरूप है। मैं मोंगो खोल में इस की कोशिश की है:मोंगो डीबी में नेस्टेड प्रश्नों को कैसे बनाया जाए जो नेस्टेड एसक्यूएल चुनिंदा प्रश्नों की तरह काम करता है
db.user.save({_id:"u1", Name:"u1 name"});
db.user.save({_id:"u2", Name:"u1 name"});
db.user.save({_id:"u3", Name:"u3 name"});
db.usergroup.save({_id:"g1", Users: ["u2","u3"]});
अब यहाँ का चयन मैं क्या करना चाहते है, लेकिन हार्डकोड बिना [ "यू 2", "यू 3"] सरणी:
db.user.find({_id:{$in:["u2","u3"]}}).forEach(printjson);
यह ठीक काम करता है और यू 2 और यू 3 के लिए उपयोगकर्ता ऑब्जेक्ट देता है।
अब प्रश्न यह है कि एक क्वेरी के साथ निकाले गए ऑपरेटर में $ में उपयोगकर्ता आईडी की सरणी कैसे प्राप्त करें, ताकि संपूर्ण क्वेरी एक अनुरोध के साथ की जा सके।
इस तरह एक "नेस्टेड क्वेरी" काम नहीं करता: मंगल मार्च 27 06:17:41 न आया हुआ अपवाद: त्रुटि: { "$ अं":
db.user.find({_id:{$in:db.usergroup.find({_id:"g1"},{_id:0,Users:1})}}).forEach(printjson);
इस त्रुटि देता है "अवैध क्वेरी" , "कोड": 12580} लोड करने में विफल: mongoNestedSelect.js
1) क्या यह मोंगोडब में और कैसे संभव है?
2) आधिकारिक सी # ड्राइवर के साथ ऐसा कैसे करें?
ठीक धन्यवाद। तो मोंगोडीबी में "असली घोंसला प्रश्न" संभव नहीं हैं? और हाँ मैं ऑब्जेक्ट आईडी के बारे में आपकी टिप्पणी से सहमत हूं, लेकिन मैंने सामानों को सरल रखने के लिए इस उदाहरण में तारों का उपयोग किया था। – ssn
दाएं, कोई नेस्टेड प्रश्न नहीं, आपके डेटा को संरचित करने की आवश्यकता है ताकि आप डेटाबेस में अनुरोधों के एकल (या न्यूनतम संख्या) के साथ जो चाहते हैं उसे प्राप्त कर सकें। –