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

नेवला उप-दस्तावेज़ छँटाई

मैं इसे कुछ चीजों के रूप में लिख सकता था, लेकिन विचार करने पर "नेवला वस्तुओं को वापस प्राप्त करना" मुख्य विचार है।

तो ऐसी कई चीजें हैं जो आप "कर सकते हैं"। लेकिन चूंकि आप किसी ऑब्जेक्ट में "संदर्भों को पॉप्युलेट कर रहे हैं" और फिर किसी सरणी में ऑब्जेक्ट्स के क्रम को बदलना चाहते हैं, वास्तव में इसे एक बार और सभी के लिए ठीक करने का केवल एक ही तरीका है।

डेटा बनाते समय उसे ठीक करें

यदि आप चाहते हैं कि आपकी "टिप्पणियां" सरणी "बनाई गई_एट" तिथि के अनुसार क्रमबद्ध हो, तो यह कई संभावनाओं में भी टूट जाती है:

  1. इसे "सम्मिलन" क्रम में जोड़ा जाना चाहिए था, इसलिए "नवीनतम" अंतिम है जैसा कि आप नोट करते हैं, लेकिन आप मोंगोडीबी के हालिया (पिछले कुछ वर्षों में) संस्करणों में $position $push के संशोधक के रूप में :

    Article.update(
        { "_id": articleId },
        { 
            "$push": { "comments": { "$each": [newComment], "$position": 0 } }
        },
        function(err,result) {
            // other work in here
        }
    );
    

    यह "प्रथम" (0) अनुक्रमणिका पर मौजूदा सरणी में सरणी तत्व को "प्रीपेन्ड" करता है, इसलिए यह हमेशा सामने होता है।

  2. तार्किक कारणों से या जहां आप "सुनिश्चित होना चाहते हैं" के लिए "स्थितिगत" अपडेट का उपयोग करने में विफल होना, फिर "लंबे समय तक" समय के आसपास रहा है $sort $push . के लिए संशोधक :

    Article.update(
        { "_id": articleId },
        { 
            "$push": { 
                "comments": { 
                    "$each": [newComment], 
                    "$sort": { "$created_at": -1 } 
                }
            }
        },
        function(err,result) {
            // other work in here
        }
    );
    

    और वह सरणी तत्व दस्तावेज़ों की संपत्ति पर "सॉर्ट" करेगा जिसमें प्रत्येक संशोधन पर निर्दिष्ट मान होता है। आप यह भी कर सकते हैं:

    Article.update(
        {  },
        { 
            "$push": { 
                "comments": { 
                    "$each": [], 
                    "$sort": { "$created_at": -1 } 
                }
            }
        },
        { "multi": true },
        function(err,result) {
            // other work in here
        }
    );
    

    और यह आपके पूरे संग्रह में प्रत्येक "टिप्पणियों" सरणी को निर्दिष्ट फ़ील्ड द्वारा एक हिट में सॉर्ट करेगा।

.aggregate() . का उपयोग करके अन्य समाधान संभव हैं उस ऑपरेशन को करने के बाद या अपना खुद का .sort() करने के बाद, नेवला ऑब्जेक्ट्स को ऐरे और/या "री-कास्टिंग" को सॉर्ट करने के लिए सादे वस्तु पर।

इन दोनों में वास्तव में "संदर्भित" जानकारी सहित एम्बेडेड आइटम के साथ एक अलग मॉडल ऑब्जेक्ट और "स्कीमा" बनाना शामिल है। तो आप उन पंक्तियों पर काम कर सकते हैं, लेकिन यह अनावश्यक ओवरहेड प्रतीत होता है जब आप डेटा को "सबसे आवश्यक" पहले स्थान पर क्रमबद्ध कर सकते हैं।

वैकल्पिक यह सुनिश्चित करना है कि "वर्चुअल" जैसे फ़ील्ड हमेशा .toObject() के साथ ऑब्जेक्ट प्रारूप में "क्रमबद्ध" करें। कॉल पर और बस इस तथ्य के साथ जीते हैं कि सभी विधियां अब समाप्त हो गई हैं और प्रस्तुत गुणों के साथ काम करें।

अंतिम एक "समझदार" दृष्टिकोण है, लेकिन यदि आप आमतौर पर "create_at" ऑर्डर का उपयोग करते हैं, तो यह आपके डेटा को हर ऑपरेशन के साथ "स्टोर" करने के लिए और अधिक समझ में आता है, इसलिए जब आप इसे "पुनर्प्राप्त" करते हैं, तो यह रहता है आदेश जिसका आप उपयोग करने जा रहे हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. दस्तावेज़ से संग्रह का नाम खोजें। उल्का (मोंगोडब) में आईडी

  2. नेवला का उपयोग कर सर्वर साइड छँटाई (mongodb + node.js)

  3. मैं Apache Camel और MongoDB का उपयोग करके एक डायनामिक समान क्वेरी कैसे बना सकता हूँ?

  4. MongoDB दस्तावेज़ के सभी गुणों पर खोजें

  5. MongoDB $lookup एग्रीगेशन ऑपरेटर के साथ साझाकरण का उपयोग करेगा