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

दिनांक अंतराल के अनुसार समूहित करें

MongoDB के एकत्रीकरण ढांचे के लिए दिनांक एकत्रीकरण ऑपरेटर उपलब्ध हैं। तो उदाहरण के लिए एक $dayOfYear ऑपरेटर का उपयोग समूहीकरण में उपयोग की तिथि से उस मान को प्राप्त करने के लिए किया जाता है:

db.collection.aggregate([
    { "$group": {
        "_id": { "$dayOfYear": "$datetime" },
        "total": { "$sum": "$count" }
    }}
])

या आप इसके बजाय दिनांक गणित दृष्टिकोण का उपयोग कर सकते हैं। युग की तारीख को लागू करके आप तारीख वस्तु को उस संख्या में बदल देते हैं जहां गणित लागू किया जा सकता है:

db.collection.aggregate([
    { "$group": {
        "_id": { 
            "$subtract": [
                { "$subtract": [ "$datetime", new Date("1970-01-01") ] },
                { "$mod": [
                    { "$subtract": [ "$datetime", new Date("1970-01-01") ] },
                    1000 * 60 * 60 * 24
                ]}
            ]
        },
        "total": { "$sum": "$count" }
    }}
])

यदि आप जो चाहते हैं वह वर्तमान समय से अंतराल है तो आप जो चाहते हैं वह मूल रूप से दिनांक गणित दृष्टिकोण है और $cond के माध्यम से कुछ शर्तों में काम कर रहा है। ऑपरेटर:

db.collection.aggregate([
    { "$match": {
        "datetime": { 
            "$gte": new Date(new Date().valueOf() - ( 1000 * 60 * 60 * 24 * 365 ))
        }
    }},
    { "$group": {
        "_id": null,
        "24hours": { 
            "$sum": {
                "$cond": [
                    { "$gt": [
                        { "$subtract": [ "$datetime", new Date("1970-01-01") ] },
                        new Date().valueOf() - ( 1000 * 60 * 60 * 24 )
                    ]},
                    "$count",
                    0
                ]
            }
        },
        "30days": { 
            "$sum": {
                "$cond": [
                    { "$gt": [
                        { "$subtract": [ "$datetime", new Date("1970-01-01") ] },
                        new Date().valueOf() - ( 1000 * 60 * 60 * 24 * 30 )
                    ]},
                    "$count",
                    0
                ]
            }
        },
        "OneYear": { 
            "$sum": {
                "$cond": [
                    { "$gt": [
                        { "$subtract": [ "$datetime", new Date("1970-01-01") ] },
                        new Date().valueOf() - ( 1000 * 60 * 60 * 24 * 365 )
                    ]},
                    "$count",
                    0
                ]
            }
        }
    }}
])

यह अनिवार्य रूप से SQL उदाहरण के समान दृष्टिकोण है, जहां क्वेरी सशर्त रूप से मूल्यांकन करती है कि दिनांक मान आवश्यक सीमा के भीतर आता है या नहीं और यह तय करता है कि मान को योग में जोड़ना है या नहीं।

यहां एक अतिरिक्त $match है चरण केवल उन मदों पर कार्रवाई करने के लिए क्वेरी को प्रतिबंधित करने के लिए है जो संभवतः अधिकतम एक वर्ष की सीमा के भीतर होंगे जो आप मांग रहे हैं। यह प्रस्तुत एसक्यूएल से थोड़ा बेहतर बनाता है जिसमें उन मानों को फ़िल्टर करने के लिए एक इंडेक्स का उपयोग किया जा सकता है और आपको संग्रह में गैर-मिलान डेटा के माध्यम से "बलपूर्वक" करने की आवश्यकता नहीं है।

इनपुट को $match . के साथ प्रतिबंधित करना हमेशा एक अच्छा विचार है एकत्रीकरण पाइपलाइन का उपयोग करते समय।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB नेस्टेड सरणी में फ़ील्ड अपडेट कर रहा है

  2. हम स्प्रिंग बूट का उपयोग करके मोंगोडब के लिए ऑटो जेनरेटेड फ़ील्ड कैसे बना सकते हैं?

  3. क्या मुझे उत्पाद परिवेश में allowDiskUse विकल्प का उपयोग करना चाहिए?

  4. 3 स्तरों के साथ MongoDB नेस्टेड लुकअप

  5. MongoDB:लोकेल ::पहलू ::_S_create_c_locale नाम मान्य नहीं है