MongoDB के साथ यह हमेशा संभव रहा है क्योंकि जावास्क्रिप्ट मूल्यांकन :
db.attrs.find(function() {
var attrs = this.attrs;
return Object.keys(attrs).some(function(key) {
return attrs[key].value === "14"
});
})
जहां वह आवश्यक मूल्य के लिए दस्तावेज़ में संभावित कुंजियों को खोजकर यहां स्थिति से मेल खाने वाले दस्तावेज़ों को सही ढंग से वापस कर देगा।
लेकिन यह वास्तव में "संभव" पर एक प्रश्न नहीं है, लेकिन "क्या यह वास्तव में एक अच्छा विचार है" में से एक है , जिसका मूल उत्तर "नहीं" है।
डेटाबेस चंचल जानवर होते हैं जो इंडेक्स जैसी चीजों के साथ अनुकूलन करना पसंद करते हैं, साथ ही साथ अपने स्वयं के अपेक्षित ऑपरेटर को खोज को यथासंभव कुशल बनाने के लिए सेट करते हैं। तो हाँ, आप एक भाषा दुभाषिया के माध्यम से जा सकते हैं जो प्रभावी रूप से पाशविक बल प्रत्येक दस्तावेज़ में एक कोडित स्थिति का मूल्यांकन करता है, या आप अपने डिज़ाइन पैटर्न पर पुनर्विचार कर सकते हैं।
डेटाबेस "आदेश" से प्यार करते हैं, इसलिए इसे कुछ दें, क्योंकि आपके द्वारा प्रस्तावित डेटा के लिए एक सरल संगठित पुन:संरचना है:
{
"attrs" : [
{ "key": "A1", "type" : "T1", "value" : "13" },
{ "key": "A2", "type" : "T2", "value" : "14" }
]
}
इस तरह से व्यवस्थित करने से क्वेरी उतनी ही सरल हो जाती है:
db.attrs.find({ "attrs.value": "14" })
और निश्चित रूप से सरणी में उप-दस्तावेज़ के उन गुणों में से किसी पर एक अनुक्रमणिका का समर्थन और उपयोग कर सकते हैं।
मोंगोडीबी बाद में एक "डेटाबेस" है, और सभी डेटाबेस की तरह यह इसके गुणों के "मूल्यों" से सबसे अधिक चिंतित है, बल्कि इसके "कुंजी" के नामों का उपयोग करके खोज रहा है। इसलिए जो चीजें सार्थक "डेटा" का प्रतिनिधित्व करती हैं, उन्हें "कुंजी" के नाम का हिस्सा नहीं होना चाहिए, बल्कि उन्हें "पहचानकर्ता" के रूप में "कुंजी" का "मान" होना चाहिए, जैसा कि ऊपर दिखाया गया है।
जिस डेटा पर आप क्वेरी करना चाहते हैं, उसके लिए एक सुसंगत पथ होना MongoDB के अंदर डेटा के साथ काम करने का सबसे अच्छा तरीका है। ऐसी संरचना का उपयोग करना जहां कुंजी नाम लगातार बदल रहे हैं, चल रहे कोड के अलावा किसी अन्य चीज़ से नहीं खोजा जा सकता है, और यह इतना धीमा है और स्थानीय संचालन और अनुक्रमणिका जैसी सुविधाओं का उपयोग करने की तुलना में प्रदर्शन के लिए बदतर है।