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

रिकर्सन क्वेरी?

मोंगोडीबी/दस्तावेज़ डेटाबेस में पदानुक्रम का प्रतिनिधित्व करने के तरीके के बारे में कुछ उदाहरणों में आपके द्वारा वर्णित एक्सेस पैटर्न के प्रकार के लिए कौन सा स्कीमा सबसे उपयुक्त होगा, इस बारे में प्रश्न।

एक सामान्य उत्तर जो कई अलग-अलग प्रश्नों के लिए काम करता है, वह यह है कि आप प्रत्येक फ़ाइल में उसका नाम, आकार, प्रत्यक्ष माता-पिता और उसके सभी पूर्वजों की सरणी संग्रहीत करते हैं।

इससे आपका नमूना डेटा बन जाएगा:

db.files.save({ _id: "root"})
db.files.save({ _id: "src", parent: "root", ancestors: ["root"] } )
db.files.save({ _id: "lib", parent: "root", ancestors: ["root"]} )
db.files.save({ _id: "config.cfg", parent: "root", ancestors: ["root"], size: 2310 })
db.files.save({ _id: "file1.js", parent: "src", ancestors: ["root","src"], size: 5039 })
db.files.save({ _id: "file2.js", parent: "src", ancestors: ["root","src"], size: 1299 })

अब यदि आप "इस निर्देशिका में फ़ाइलें" या "इस निर्देशिका के अंतर्गत सभी फ़ाइलें (पुनरावर्ती सहित)" जैसी चीज़ों के लिए क्वेरी करना चाहते हैं, तो आप क्वेरी:

db.files.find( { parent: "root" } )    // all files in /src directory
db.files.find( {ancestors: "root"} )   // all files under /root directory tree

चूंकि आपको योग जैसी चीजें प्राप्त करने के लिए एकत्रीकरण ढांचे का उपयोग करने की आवश्यकता है, फ़ोल्डर के आकार के लिए क्वेरी होगी:

db.files.aggregate([
       {$match:{ancestors:"src"}}, 
       {$group:{
           _id:   "src",
           total_size:  {$sum:"$size"}
          }
       }
]);

रूट फ़ोल्डर में मौजूद सभी फ़ोल्डरों का आकार देखने के लिए यह होगा:

db.files.aggregate([
       {$match:{ancestors:"root"}}, 
       {$group:{
           _id:   "root",
           total_size:  {$sum:"$size"}
          }
       }
]);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला का उपयोग करके मोंगोडब के लिए कनेक्शन टाइमआउट

  2. MongoDb गति में कमी

  3. आराम और मैच के बाद समूह सरणी

  4. C# MongoDB ड्राइवर का उपयोग करके नेस्टेड सरणी $पुल क्वेरी

  5. कॉलबैक के साथ लीन इन नेवला का उपयोग करें