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

ब्लॉग के लिए मोंगोडब स्कीमा डिज़ाइन

Article {
  "_id" : "A",
  "title" : "Hello World",
  "user_id" : 12345,
  "text" : 'My test article',

  "comments" : [
    { 'text' : 'blah', 'user_id' : 654321, 'votes' : [987654]},
    { 'text' : 'foo', 'user_id' : 987654, 'votes' : [12345, 654321] },
    ...
  ]
}

यहाँ मूल आधार यह है कि मैंने Comments को नेस्ट किया है Article . के अंदर . Votes केवल Comment पर लागू होता है , इसलिए उन्हें प्रत्येक Comment . के साथ एक सरणी के रूप में संग्रहीत किया गया है . इस मामले में, मैंने अभी user_id संग्रहीत किया है। यदि आप अधिक जानकारी (time_created, आदि) संग्रहीत करना चाहते हैं, तो आप वस्तुओं की एक सरणी को वोट कर सकते हैं:

... 'votes' : [ { user_id : 987654, ts : 78946513 } ] ...

अपने प्रश्नों को कुशलतापूर्वक कैसे निष्पादित करें:

db.articles.find( { _id : 'A' } )

यह सब कुछ एक प्रश्न के साथ मिलता है। प्रति टिप्पणी वोटों की गणना करने के लिए आपको कुछ क्लाइंट-साइड लॉजिक करना पड़ सकता है, लेकिन यह बहुत मामूली है।

db.articles.ensureIndex( { "comments.user_id" : 1 } )
db.articles.find( { "comments.user_id" : 987654 } ) // returns all document fields

अनुक्रमणिका किसी दस्तावेज़ में टिप्पणियों को कुशलता से खोजने की अनुमति देगी।

वर्तमान में उप-सरणी से केवल मैचों को निकालने का कोई तरीका नहीं है। यह प्रश्न वास्तव में उस उपयोगकर्ता द्वारा टिप्पणियों के साथ सभी लेख लौटाएगा। यदि यह संभावित रूप से बहुत अधिक डेटा है, तो आप कुछ ट्रिमिंग कर सकते हैं।

db.articles.find( { "comments.user_id" : 987654 }, { "title" : 1, "comments.user_id" : 1 })
db.articles.ensureIndex( { "comments.votes" : 1 } )
db.articles.find( { "comments.votes" : 987654 } )

फिर से, यह केवल टिप्पणियों को ही नहीं, बल्कि सभी लेखों को लौटा देगा।

यहां एक ट्रेड-ऑफ बनाया जाना है। लेख को वापस करने से ऐसा लग सकता है कि हम बहुत अधिक डेटा वापस ला रहे हैं। लेकिन जब आप क्वेरी #3 करते हैं तो आप उपयोगकर्ता को क्या प्रदर्शित करने की योजना बना रहे हैं?

"टिप्पणियों के लिए मैंने वोट किया है" . की सूची प्राप्त करना टिप्पणी के बिना बहुत उपयोगी नहीं है। बेशक टिप्पणी लेख के बिना बहुत उपयोगी नहीं है (या कम से कम सिर्फ शीर्षक)।

अधिकांश समय, क्वेरी #3 Votes . से जुड़ने में बदल जाती है करने के लिए Comments Articles . के लिए . अगर ऐसा है, तो क्यों न केवल शुरुआत के लिए लेखों को वापस लाया जाए?




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoimport के साथ MongoDB में JSON फ़ाइल आयात करें

  2. MongoError को कैसे हल करें:CosmosDB से कनेक्ट करते समय पूल नष्ट हो गया

  3. एक बड़ी जोंस फ़ाइल के माध्यम से ठीक से पुनरावृति कैसे करें

  4. जब एक और ड्रॉपडाउन चुना जाता है तो उल्का गतिशील रूप से ड्रॉपडाउन फ़िल्टर करता है

  5. मोंगोडीबी:पूरी कुंजी खींचो:ऐरे जोड़ी