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

Mongodb . में अधिकतम और समूह द्वारा

वांछित परिणाम प्राप्त करने के लिए, उप क्वेरी से शुरू होने वाली SQL क्वेरी को तोड़कर प्रारंभ करें:

Select *
from tblData 
Where TFN in (Select TFN From @tmpTFNList) and TrendDate between @StartDate AND @EndDate

समकक्ष मोंगो क्वेरी इस प्रकार है:

db.getCollection("_core.data").aggregate([
    {
        "$match": {
            "TFN": { "$in": tmpTFNList },
            "TrendDate": {
                "$gte": startDate,
                "$lte": endDate
            }
        }
    }
])

$group के बराबर

Select TFN, Max(Impressions) MaxImpression 
from tblData 
Where TFN in (Select TFN From @tmpTFNList) and TrendDate between @StartDate AND @EndDate
Group by TFN 

अनुसरण करता है

db.getCollection("_core.data").aggregate([
    {
        "$match": {
            "TFN": { "$in": tmpTFNList },
            "TrendDate": {
                "$gte": startDate,
                "$lte": endDate
            }
        }
    },
    {
        "$group": {
            "_id": "$TFN",
            "MaxImpression": { "$max": "$Impression" }
        }
    }
])

शीर्ष 5 क्वेरी

Select Top 5 a.TFN, a.MaxImpression as MaxCount from ( 
    Select TFN, Max(Impressions) MaxImpression 
    from tblData 
    Where TFN in (Select TFN From @tmpTFNList) 
        and TrendDate between @StartDate AND @EndDate
    Group by TFN 
) a

$ के साथ संभव बनाया गया है सीमा ऑपरेटर और फ़ील्ड चयन $प्रोजेक्ट मंच के रूप में

db.getCollection("_core.data").aggregate([
    { /* WHERE TFN in list AND TrendDate between DATES */
        "$match": {
            "TFN": { "$in": tmpTFNList },
            "TrendDate": {
                "$gte": startDate,
                "$lte": endDate
            }
        }
    },
    { /* GROUP BY TFN */
        "$group": {
            "_id": "$TFN",
            "MaxImpression": { "$max": "$Impression" }
        }
    },
    { "$limit": 5 }, /* TOP 5 */
    { /* SELECT a.MaxImpression as MaxCount */
        "$project": {
            "TFN": "$_id",
            "_id": 0,
            "MaxCount": "$MaxImpression"
        }
    }
])

अपडेट करें

इस में नमूने से वांछित परिणाम प्राप्त करने के लिए संपादित करें , आपको एक अतिरिक्त $ चाहिए क्रमबद्ध करें $group<से पहले पाइपलाइन /कोड> जहाँ आप दस्तावेज़ों को TrendDate . के अनुसार क्रमित करते हैं और इंप्रेशन फ़ील्ड, दोनों अवरोही क्रम में।

फिर आपको <कोड का उपयोग करना होगा>$पहले $group में संचायक ऑपरेटर अधिकतम प्रभाव प्राप्त करने के लिए पाइपलाइन चरण क्योंकि आपके पास अपनी पाइपलाइन में दस्तावेज़ों की एक ऑर्डर की गई स्ट्रीम होगी।

संशोधित समग्र संचालन को इस प्रकार चलाने पर विचार करें:

db.getCollection('collection').aggregate([
    { 
        "$match": {
            "TFN": { "$in": tmpTFNList },
            "TrendDate": {
                "$gte": startDate,
                "$lte": endDate
            }
        }
    },
    { "$sort": { "TrendDate": -1, "Impression": -1 } },
    {  
        "$group": {
            "_id": "$TFN",
            "MaxImpression": { "$first": "$Impression" }
        }
    },
    { "$limit": 5 }, 
    {   
        "$project": {
            "TFN": "$_id",
            "_id": 0,
            "MaxCount": "$MaxImpression"
        }
    }
])

नमूना आउटपुट

/* 1 */
{
    "TFN" : 84251456,
    "MaxCount" : 22
}

/* 2 */
{
    "TFN" : 84251455,
    "MaxCount" : 35
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB बराबर नहीं है

  2. मोंगोडब अद्यतन गहराई से नेस्टेड उप-दस्तावेज़

  3. स्प्रिंग बूट मोंगोडब ऑडिटिंग त्रुटि

  4. स्प्रिंग डेटा मोंगो समय वाले क्षेत्र को वापस क्यों नहीं कर रहा है?

  5. MongoDB:रेगेक्स का उपयोग करके किसी फ़ील्ड का नाम कैसे बदलें