MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मनमाना गहराई पर MongoDB फ़ील्ड नाम कैसे खोजें

आप सही कह रहे हैं कि एक बीएसओएन दस्तावेज़ एक एक्सएमएल दस्तावेज़ नहीं है। चूंकि एक्सएमएल एक पेड़ संरचना में लोड किया गया है जिसमें "नोड्स" शामिल हैं, एक आर्बिटरी कुंजी पर खोज करना काफी आसान है।

एक मोनोडीबी दस्तावेज़ को संसाधित करना इतना आसान नहीं है, और यह कई मामलों में "डेटाबेस" है, इसलिए आम तौर पर "इंडेक्स" और खोज दोनों को आसान बनाने के लिए डेटा स्थानों की एक निश्चित "एकरूपता" होने की उम्मीद है।

बहरहाल, यह किया जा सकता है। लेकिन निश्चित रूप से इसका मतलब सर्वर पर एक पुनरावर्ती प्रक्रिया को क्रियान्वित करना है और इसका अर्थ है $where के साथ जावास्क्रिप्ट प्रसंस्करण

मूल शेल उदाहरण के रूप में, लेकिन सामान्य function $where . के लिए सिर्फ एक स्ट्रिंग तर्क है हर जगह ऑपरेटर:

db.collection.find(
  function () {
    var findKey = "find-this",
        findVal = "please find me";

    function inspectObj(doc) {
      return Object.keys(doc).some(function(key) {
        if ( typeof(doc[key]) == "object" ) {
          return inspectObj(doc[key]);
        } else {
          return ( key == findKey && doc[key] == findVal );
        }
      });
    }
    return inspectObj(this);
  }
)

तो मूल रूप से, ऑब्जेक्ट में मौजूद कुंजियों का परीक्षण करके देखें कि क्या वे वांछित "फ़ील्ड नाम" और सामग्री से मेल खाते हैं। यदि उन कुंजियों में से एक "ऑब्जेक्ट" होती है, तो फ़ंक्शन में पुन:प्रवेश करें और फिर से निरीक्षण करें।

जावास्क्रिप्ट .some() यह सुनिश्चित करता है कि पाया गया "पहला" मिलान true . देते हुए खोज फ़ंक्शन से वापस आ जाएगा परिणाम और उस वस्तु को वापस करना जहां वह "कुंजी/मान" कुछ गहराई पर मौजूद था।

ध्यान दें कि $where अनिवार्य रूप से आपके पूरे संग्रह का पता लगाने का मतलब है जब तक कि संग्रह पर "इंडेक्स" पर लागू होने के अलावा कोई अन्य मान्य क्वेरी फ़िल्टर न हो।

तो सावधानी से उपयोग करें, या बिल्कुल नहीं और डेटा को अधिक व्यावहारिक रूप में फिर से संरचित करने के साथ काम करें।

लेकिन यह आपको आपका मैच देगा।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्लस्टर नियंत्रण प्रदर्शन और स्वास्थ्य निगरानी

  2. परमाणु ऑपरेशन के साथ एक दस्तावेज़ में बूलियन फ़ील्ड को कैसे टॉगल करें?

  3. एक MongoDB सरणी में डुप्लिकेट मान ढूँढना

  4. ClusterControl के साथ एकाधिक डेटाबेस तकनीकों का प्रबंधन

  5. सी # के साथ मोंगोडीबी में केवल एक निर्दिष्ट फ़ील्ड प्राप्त करें