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

MongoDB कुल समूह सरणी से कुंजी:योग मान

अपने वास्तविक रूप के लिए, और इसलिए यह मानते हुए कि आप वास्तव में "प्रकार" के संभावित मूल्यों को जानते हैं, तो आप इसे दो $समूह चरणों और $cond ऑपरेटर:

db.types.aggregate([
    { "$group": {
         "_id": {
             "stat": "$stat",
             "type": "$type"
         },
         "count": { "$sum": 1 }
    }},
    { "$group": {
        "_id": "$_id.stat",
        "type1": { "$sum": { "$cond": [
            { "$eq": [ "$_id.type", 1 ] },
            "$count",
            0
        ]}},
        "type2": { "$sum": { "$cond": [
            { "$eq": [ "$_id.type", 2 ] },
            "$count",
            0
        ]}},
        "type3": { "$sum": { "$cond": [
            { "$eq": [ "$_id.type", 3 ] },
            "$count",
            0
        ]}}
    }}
])

जो बिल्कुल देता है:

{ "_id" : "foobar", "type1" : 2, "type2" : 1, "type3" : 1 }

मैं वास्तव में दो के साथ अधिक गतिशील रूप पसंद करता हूं $ समूह हालांकि चरण:

db.types.aggregate([
    { "$group": {
         "_id": {
             "stat": "$stat",
             "type": "$type"
         },
         "count": { "$sum": 1 }
    }},
    { "$group": {
        "_id": "$_id.stat",
        "types": { "$push": {
            "type": "$_id.type",
            "count": "$count"
        }}
    }}
])

समान आउटपुट नहीं बल्कि कार्यात्मक और मूल्यों के लिए लचीला:

{
    "_id" : "foobar",
    "types" : [
            {
                    "type" : 3,
                    "count" : 1
            },
            {
                    "type" : 2,
                    "count" : 1
            },
            {
                    "type" : 1,
                    "count" : 2
            }
    ]
}

अन्यथा यदि आपको समान आउटपुट स्वरूप की आवश्यकता है लेकिन लचीले फ़ील्ड की आवश्यकता है तो आप हमेशा mapReduce का उपयोग कर सकते हैं, लेकिन यह बिल्कुल समान आउटपुट नहीं है।

db.types.mapReduce(
    function () {

        var obj = { };

        var key = "type" + this.type;
        obj[key] = 1;

        emit( this.stat, obj );

    },
    function (key,values) {

        var obj = {};

        values.forEach(function(value) {
            for ( var k in value ) {
                if ( !obj.hasOwnProperty(k) )
                    obj[k] = 0;
                obj[k]++;
            }
        });

        return obj;

    },
    { "out": { "inline": 1 } }
)

और सामान्य मानचित्र में शैली कम करें:

   "results" : [
            {
                    "_id" : "foobar",
                    "value" : {
                            "type1" : 2,
                            "type2" : 1,
                            "type3" : 1
                    }
            }
    ],

लेकिन ये आपके विकल्प हैं



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $निकट और $भीतर . के बीच MongoDB भू-स्थानिक अंतर

  2. Django में MongoClient को कहां स्टोर करें

  3. एकत्रीकरण का उपयोग करते समय मोंगो त्रुटि:क्रमबद्ध स्मृति सीमा पार हो गई

  4. मोंगोडब:शो डीबीएस मेरे डेटाबेस क्यों नहीं दिखाता है?

  5. MongoDB अपरिभाषित बनाम अशक्त के बीच अंतर करता है