पर समेकन द्वारा मैं mongodb 2.6 का उपयोग करता हूं। मैं इस रूप में अपने डेटा को संग्रहीत किया है:समूह MongoDb
{
"_id" : "my-sensor-1",
"points": [
{ "timeStamp" : NumberLong("1453468362174"), "value" : 41 },
{ "timeStamp" : NumberLong("1453468483297"), "value" : 66 },
{ "timeStamp" : NumberLong("1453468485568"), "value" : 49 },
...
]
}
आदेश दस्तावेजों मैं इस तरह के प्रश्नों बनाने के समेकित करने में:
db.pointsTest.aggregate([
{ $match: { $and: [ {"points.timeStamp" : { $gt : 1453433925163}},
{"_id":"my-sensor-10"} ] } },
{"$unwind":"$points"},
{$group: {_id: "my-sensor-1","average":{$avg : "$points.value"}}}
])
{ "_ id": "मेरी सेंसर -1 "," औसत ": 52}
परिणाम
मैंने टाइमस्टैम्प को मिलीसेकंड के रूप में संग्रहीत किया है, इसलिए हर बार जब मैं एक विशिष्ट समय अंतराल को एकत्र करना चाहता हूं तो मुझे टाइमस्टैम्प मान की सीमाएं बदलनी होंगी।
मैं समय अवधि पर एकत्रीकरण कैसे कर सकता हूं और परिणामों को अंतराल अंतराल से समूहित कर सकता हूं (यानी अब से औसत मूल्य को एकत्रित करें() -1day ग्रुप 1h)?
संपादित
मैं कुछ इस तरह बनाना चाहते:
db.pointsTest.aggregate([
{ $match: { $and: [ {"points.timeStamp" : { $gt : 1453433925163, $lt : 1453555555555}}, {"_id":"my-sensor-10"} ] } }, {"$unwind":"$points"}, {$group: {_id: "my-sensor-1","average":{$avg : "$points.value"}, ???}}
])
और परिणाम इस बार 1 घंटे के आधार पर वर्गीकृत अंतराल की औसत होगा। यह मानते हुए कि मैं दिसंबर के 31 के हर घंटे के लिए औसत मान इकट्ठा करना चाहते हैं:
अंतराल 31/12/2015 20:00:00, औसत के टाइमस्टैम्प: अंतराल 31 की xyz
टाइमस्टैम्प क्रम में प्राप्त करने के लिए मैं 1hour अंतराल में समय अंतराल विभाजित है और डेटाबेस के लिए कई अनुरोध करने के लिए है कि xyz
इस समय:/12/2015 21:00:00, औसत।
आईई InfluxDB का उपयोग कर एक ही मैं यह करने के करने के लिए:
"SELECT MEAN(value) From myMeasures where key='my-sensor-1' and time > now() - 1d GROUP BY time(1h)"
वास्तव में उपयोगी है लेकिन मैं यह कुछ याद आ रही है लगता है (शायद मैं अपने प्रश्न पर यह निर्दिष्ट नहीं किया है)। सूची में वस्तुओं को फिर से शुरू करने के लिए मुझे एक और $ मैच जोड़ना पड़ा क्योंकि जब स्थिति सही होती है तो यह पूरे आइटम लौटाती है। तो क्वेरी इस तरह है: db.pointsTest.aggregate ({$ match: {$ और: [{"points.timeStamp": {$ gte: 1453797806927}}, {"_id": "my-sensor-1"} ]}}, {$ unwind: "$ points"}, {$ match: {"points.timeStamp": {$ gte: 1453797806927}}}, {"$ समूह": {"_id": {"$ घटाएं" : ["$ अंक। टाइमस्टैम्प", {"$ mod": ["$ points.timeStamp", 1000 * 60]}]}, "औसत": {"$ avg": "$ points.value"}}}) – bill