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

जावास्क्रिप्ट और मोंगोडब का उपयोग करके समय श्रृंखला डेटा का पुन:नमूना करें

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

मान लें कि आपके पास devices . नामक MongoDB संग्रह में निम्न डेटा संग्रहीत है

/* 0 */
{
    "_id" : ObjectId("543fc08ccf1e8c06c0288802"),
    "t" : ISODate("2014-10-20T14:56:44.097+02:00"),
    "a" : "192.168.0.16",
    "i" : 0,
    "o" : 32
}

/* 1 */
{
    "_id" : ObjectId("543fc08ccf1e8c06c0288803"),
    "t" : ISODate("2014-10-20T14:56:59.107+02:00"),
    "a" : "192.168.0.16",
    "i" : 14243,
    "o" : 8430
}

and so on...

जो, इस मामले में, लगभग हर 15 सेकंड में नमूना लिया जाता है, लेकिन यह अनियमित भी हो सकता है। यदि आप इसे किसी निश्चित दिन के लिए 5 मिनट की सीमा में फिर से नमूना देना चाहते हैं, तो आपको निम्न कार्य करना चाहिए:

var low = ISODate("2014-10-23T00:00:00.000+02:00")
var high = ISODate("2014-10-24T00:00:00.000+02:00")
var interval = 5*60*1000;
db.devices.aggregate([
  {$match: {t:{$gte: low, $lt: high}, a:"192.168.0.16"}},
  {$group: {
     _id:{
       $subtract: ["$t", {
         $mod: [{
           $subtract: ["$t", low]
         }, interval]
       }]
     },
     total: {$sum: 1},
     incoming: {$sum: "$i"},
     outgoing: {$sum: "$o"},
    }
  },
  {
    $project: {
      total: true,
      incoming: true,
      outgoing: true,
      incoming_avg: {$divide: ["$incoming", "$total"]},
      outgoing_avg: {$divide: ["$outgoing", "$total"]},
    },
  },
  {$sort: {_id : 1}}
])

इसका परिणाम कुछ इस तरह होगा

{
    "result" : [ 
        {
            "_id" : ISODate("2014-10-23T07:25:00.000+02:00"),
            "total" : 8,
            "incoming" : 11039108,
            "outgoing" : 404983,
            "incoming_avg" : 1379888.5,
            "outgoing_avg" : 50622.875
        }, 
        {
            "_id" : ISODate("2014-10-23T07:30:00.000+02:00"),
            "total" : 19,
            "incoming" : 187241,
            "outgoing" : 239912,
            "incoming_avg" : 9854.78947368421,
            "outgoing_avg" : 12626.94736842105
        }, 
        {
            "_id" : ISODate("2014-10-23T07:35:00.000+02:00"),
            "total" : 17,
            "incoming" : 22420099,
            "outgoing" : 1018766,
            "incoming_avg" : 1318829.352941176,
            "outgoing_avg" : 59927.41176470588
        },
        ...

यदि आप कुल आवक को छोड़ना चाहते हैं, तो बस $project चरण में लाइन को छोड़ दें। यदि आपका संग्रहीत डेटा कुछ ऐसा है जो rrdtool एक गेज (तापमान, सीपीयू, सेंसर डेटा) का नाम देता है, तो इनकमिंग_एवरेज औसत की गणना करने का एक उदाहरण है। यदि आप केवल उस समय व्युत्क्रम में एकत्रित राशि के बाद हैं, जो कि इनकमिंग और आउटगोइंग फ़ील्ड है, तो आप पूरे $project चरण को छोड़ सकते हैं। यह केवल समय अंतराल के औसत की गणना करने के लिए है।

देखें ISODate का Mongo एकत्रीकरण 45 मिनट के टुकड़ों में




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:कुल $ प्रोजेक्ट स्थिर मान के साथ फ़ील्ड जोड़ें

  2. विंडोज़ पर मोंगोडीबी कैसे स्थापित करें?

  3. मोंगोडब डॉट नोटेशन वाइल्डकार्ड?

  4. Node.js - Mongoose - req.body में सभी मानों के साथ नेस्टेड सरणी अपडेट करें

  5. mongodb . में दिनांक के साथ समय क्षेत्र बचाएं