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

MongoDB एकत्रीकरण ढांचे के साथ नेस्टेड पोस्ट कैसे समूहित करें?

निम्नलिखित पाइपलाइन आपके लिए काम करेगी:

var pipeline = [
    {
        "$project": {
            "title": 1, "body": 1, 
            "post_id": { "$ifNull": [ "$_post", "$_id" ] }
        }
    },  
    {
        "$group": {
            "_id": "$post_id",
            "title": { "$first": "$title" },
            "body": { "$first": "$body" },
            "comments": {
                "$push": {
                    "_id": "$_id",
                    "_post": "$post_id",
                    "body": "$body"
                }
            }
        }
    },
    {
        "$project": {
            "title": 1, "body": 1,
            "comments": {
                "$setDifference": [
                    {
                        "$map": {
                            "input": "$comments",
                            "as": "el",
                            "in": {
                                "$cond": [
                                    { "$ne": [ "$$el._id", "$$el._post" ] },
                                    "$$el",
                                    false
                                ]
                            }
                        }
                    },
                    [false]
                ]
            }
        }
    }
];

Post.aggregate(pipeline, function (err, result) {
    if (err) { /* handle error */ };
    console.log(result);
});

पाइपलाइन इस तरह से संरचित है कि आपका पहला कदम, $project ऑपरेटर चरण, फ़ील्ड को प्रोजेक्ट करना है post_id अगले पाइपलाइन चरण में कुंजी द्वारा समूह के रूप में उपयोग किया जाना है। चूंकि आपकी स्कीमा पदानुक्रमित है, इसलिए आपको माता-पिता/रूट दस्तावेज़ों के लिए इस फ़ील्ड की आवश्यकता होगी। $ifNull यदि दस्तावेज़ में फ़ील्ड मौजूद नहीं है, तो ऑपरेटर कोलेस ऑपरेटर के रूप में कार्य करेगा और प्रतिस्थापन मूल्य वापस कर देगा।

अगला पाइपलाइन चरण, $समूह पाइपलाइन चरण डेटा को संसाधित करने के लिए समूहबद्ध करने का प्रयास करता है। $group पाइपलाइन ऑपरेटर SQL के ग्रुप बाय क्लॉज के समान है। SQL में, हम GROUP BY का उपयोग तब तक नहीं कर सकते जब तक कि हम किसी एकत्रीकरण फ़ंक्शन का उपयोग नहीं करते। उसी तरह, हमें MongoDB में भी एकत्रीकरण फ़ंक्शन का उपयोग करना होगा। इस मामले में आपको $पुश टिप्पणी सरणी बनाने के लिए ऑपरेटर। फिर अन्य फ़ील्ड $पहले ऑपरेटर।

अंतिम चरण में टिप्पणी सरणी को फिट करना शामिल है ताकि आप दस्तावेज़ को पोस्ट विवरण के साथ हटा दें, जो निश्चित रूप से टिप्पणी प्रकार का नहीं है। इसे <के ज़रिए संभव बनाया गया है कोड>$सेटडिफरेंस और $map ऑपरेटरों। $map ऑपरेटर संक्षेप में एक नया सरणी फ़ील्ड बनाता है जो एक सरणी के प्रत्येक तत्व के लिए एक उप-अभिव्यक्ति में मूल्यांकन किए गए तर्क के परिणामस्वरूप मान रखता है। $setDifference ऑपरेटर तब तत्वों के साथ एक सेट देता है जो पहले सेट में दिखाई देता है लेकिन दूसरे सेट में नहीं; यानी पहले के सापेक्ष दूसरे सेट का एक सापेक्ष पूरक करता है। इस मामले में यह अंतिम टिप्पणियों . लौटाएगा सरणी जिसमें _id . के माध्यम से मूल दस्तावेज़ों से संबंधित तत्व नहीं हैं संपत्ति।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो में बड़े अक्षरों को ऊंट केसिंग में बदलें?

  2. सी # मोंगोडब - नेस्टेड सरणी तत्वों को कैसे अपडेट करें?

  3. मोंगोडब त्रुटि:स्थितीय ऑपरेटर को क्वेरी से आवश्यक मिलान नहीं मिला

  4. नेवला, mongoDB में स्थिति के आधार पर आबाद करें

  5. MongoDB oplog में प्रमुख नामों में डॉट्स वाले रिकॉर्ड हैं, जिनके लिए पूछताछ नहीं की जा सकती है