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

एकत्रीकरण के दौरान MongoDB ISODate से सेकंड में यूनिक्स टाइमस्टैम्प प्राप्त करना

मुझे यकीन नहीं है कि आपको क्यों लगता है कि आपको मिलीसेकंड के बजाय सेकंड में मूल्य की आवश्यकता है क्योंकि आम तौर पर दोनों रूप मान्य होते हैं और अधिकांश भाषा कार्यान्वयन के भीतर मिलीसेकंड वास्तव में पसंद किया जाता है। लेकिन आम तौर पर बोलते हुए, इसे एक स्ट्रिंग में जबरदस्ती करने की कोशिश करना इसके चारों ओर जाने का गलत तरीका है, और आम तौर पर आप केवल गणित करते हैं:

db.data.aggregate([
  { "$project": {
    "timestamp": {
      "$subtract": [
        { "$divide": [
            { "$subtract": [ "$md", new Date("1970-01-01") ] },
            1000
        ]},
        { "$mod": [
          { "$divide": [
              { "$subtract": [ "$md", new Date("1970-01-01") ] },
              1000
          ]},
          1
        ]}
      ]
    }
  }}
])

जो आपको सेकंड में एक युग का टाइमस्टैम्प देता है। मूल रूप से जब एक बीएसओएन दिनांक वस्तु को दूसरे से घटाया जाता है तो परिणाम मिलीसेकंड में समय अंतराल होता है। "1970-01-01" की प्रारंभिक युग की तारीख का उपयोग करने से वर्तमान दिनांक मान से मिलीसेकंड मान को अनिवार्य रूप से निकाला जा सकता है। $divide ऑपरेटर अनिवार्य रूप से मिलीसेकंड भाग और $mod . को हटा देता है राउंडिंग को लागू करने के लिए मॉड्यूल करता है।

वास्तव में आप अपने आवेदन के लिए मूल भाषा में काम करने से बेहतर हैं क्योंकि सभी बीएसओएन तिथियां मूल "दिनांक/डेटाटाइम" प्रकार के रूप में वापस कर दी जाएंगी जहां आप टाइमस्टैम्प मान निकाल सकते हैं। शेल में JavaScript की मूलभूत बातों पर विचार करें:

var date = new Date()
( date.valueOf() / 1000 ) - ( ( date.valueOf() / 1000 ) % 1 )

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

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

यह फ़ॉर्म एक दिन के लिए गोल टाइमस्टैम्प उत्सर्जित करने और उन अंतरालों के भीतर परिणामों को एकत्रित करने के लिए अधिक विशिष्ट होगा।

तो केवल टाइमस्टैम्प निकालने के लिए एकत्रीकरण ढांचे का आपका उद्देश्य सबसे अच्छा उपयोग नहीं लगता है या वास्तव में इसे मिलीसेकंड के बजाय सेकंड में परिवर्तित करना आवश्यक नहीं होना चाहिए। आपके आवेदन कोड में वह जगह है जहां मुझे लगता है कि आपको ऐसा करना चाहिए जब तक कि निश्चित रूप से आप वास्तव में समय के अंतराल के लिए परिणाम नहीं चाहते हैं जहां आप दिखाए गए दिनांक गणित को लागू कर सकते हैं।

विधियां हैं, लेकिन जब तक आप वास्तव में एकत्रित नहीं होते हैं तब तक यह आपके आवेदन के लिए सबसे खराब प्रदर्शन विकल्प होगा। इसके बजाय कोड में रूपांतरण करें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में दस्तावेज़ों का थोक अद्यतन

  2. V4 से पहले MongoDB के ACID के अनुरूप नहीं होने का वास्तव में क्या मतलब था?

  3. मोंगोडब कुल कमांड/पाइपलाइन में किसी प्रकार की पंक्ति संख्या जोड़ें

  4. नेवला में यादृच्छिक रिकॉर्ड कैसे खोजें

  5. वसंत-डेटा-मोंगो - वैकल्पिक क्वेरी पैरामीटर?