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

कई क्षेत्रों द्वारा समूह संग्रह डेटा mongodb

एकत्रीकरण ढांचे के साथ, परिणाम आपके "वांछित" आउटपुट से थोड़ा अलग होगा क्योंकि हैश कुंजी होने के बजाय, आपको _id के साथ ऑब्जेक्ट्स की एक सरणी मिलती है। कुंजी का एक मान है जो आपको फ़ील्ड द्वारा समूह का प्रतिनिधित्व करता है। उदाहरण के लिए, के बजाय

{
    "28-10-2016":{
        "success_count": 10, 
        "failure_count": 10
    },
    "29-10-2016": {
        "success_count": 10, 
        "failure_count": 10
    }
}

आपके पास एक बेहतर संरचना होगी जैसे

[
    {
        "_id": "28-10-2016",
        "success_count": 10, 
        "failure_count": 10
    },
        "_id": "29-10-2016",
        "success_count": 10, 
        "failure_count": 10
    }
]

उपरोक्त परिणाम को पूरा करने के लिए <का उपयोग करने की आवश्यकता होगी। कोड>$cond ऑपरेटर में $sum संचायक ऑपरेटर। $cond ऑपरेटर अपने पहले तर्क (यदि) के आधार पर तार्किक स्थिति का मूल्यांकन करेगा और फिर दूसरा तर्क देता है जहां मूल्यांकन सत्य है (तब) या तीसरा तर्क जहां झूठा (अन्य)। यह सही/गलत तर्क को 1 और 0 संख्यात्मक मानों में बदल देता है जो $sum क्रमशः:

"success_count": {
    "$sum": {
        "$cond": [ { "$eq": [ "$status", "success" ] }, 1, 0 ]
    }
}

परिणामस्वरूप पाइपलाइन के रूप में, किसी को एग्रीगेशन ऑपरेशन चलाने की आवश्यकता होती है जो $dateToString _id . में ऑपरेटर के लिए मुख्य एक्सप्रेशन $समूह पाइपलाइन:

Orders.aggregate([
    {
        "$group": {
            "_id": {
                "$dateToString": { 
                    "format": "%Y-%m-%d", 
                    "date": "$created_at" 
                }
            },
            "success_count": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$status", "success" ] }, 1, 0 ]
                }
            },
            "failure_count": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$status", "failure" ] }, 1, 0 ]
                }
            }
        }
    }
], function (err, orders){
    if (err) throw err;
    console.log(orders);
})

हालांकि, एक अधिक लचीला और बेहतर प्रदर्शन करने वाला दृष्टिकोण है जो ऊपर की तुलना में बहुत तेजी से निष्पादित होता है, जहां आपके एकत्रीकरण परिणाम के लिए सबसे कुशल डेटा संरचना उदाहरण के लिए स्कीमा का अनुसरण करती है:

orders = [
    {
        "_id": "28-10-2016",
        "counts": [
            { "status": "success", "count": 10 },
            { "status": "failure", "count": 10 }
        ]
    },
    {
        "_id": "29-10-2016",
        "counts": [
            { "status": "success", "count": 10 },
            { "status": "failure", "count": 10 }
        ]
    }
]

फिर एक वैकल्पिक पाइपलाइन को निम्नानुसार चलाने पर विचार करें

Orders.aggregate([
    { 
        "$group": {
            "_id": { 
                "date":  {
                    "$dateToString": { 
                        "format": "%Y-%m-%d", 
                        "date": "$created_at" 
                    }
                },
                "status": { "$toLower": "$status" }
            },
            "count": { "$sum": 1 }
        }
    },
    { 
        "$group": {
            "_id": "$_id.date",
            "counts": {
                "$push": {
                    "status": "$_id.status",
                    "count": "$count"
                }
            }
        }
    }
], function (err, orders){
    if (err) throw err;
    console.log(orders);
})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या मोंगोडब एग्रीगेशन फ्रेमवर्क में फ्लोर फंक्शन है?

  2. मैं रूबी कोड से एक मोंगोडब से कैसे जुड़ सकता हूं?

  3. पायथन में बीएसओएन फाइल पढ़ें?

  4. नेवला:किसी दस्तावेज़ को अद्यतन करते समय मूल्य के लिए कास्ट टू डेट विफल रहा

  5. जावा और मोंगो:ऑब्जेक्ट प्राप्त करें जहां फ़ील्ड मौजूद है