0

Я новичок в Монго агрегирование и имеют эти данныеMongoDB агрегирование данных

{ 
"_id": { 

     "$oid": "5654a8f0d487dd1434571a6e" 
    }, 

    "ValidationDate": { 
     "$date": "2015-11-24T13:06:19.363Z" 
    }, 

    "DataRaw": " WL 00100100012015-08-28 02:44:17+0000+ 16.81 8.879 1084.00", 

    "ReadingsAreValid": true, 

    "locationID": " WL 001", 

    "Readings": { 

     "pH": { 
      "value": 8.879 
     }, 

     "SensoreDate": { 
      "value": { 
       "$date": "2015-08-28T02:44:17.000Z" 
      } 
     }, 

     "temperature": { 
      "value": 16.81 
     }, 

     "Conductivity": { 
      "value": 1084 
     } 
    }, 
    "HMAC":"ecb98d73fcb34ce2c5bbcc9c1265c8ca939f639d791a1de0f6275e2d0d71a801" 
} 

Моя цель вычислить среднюю температуру для каждого интервала в два часа, а затем в месяц, год и неделю. Я пробовал разные запросы, но не повезло. Это то, что я пытался до сих пор

data.aggregate([{"$unwind":"$Readings"}, 

{"$project":{"HourRecord":{"$hour":"Readings.SensoreDate.value"}, 

"YearRecord":{"$year":"$Readings.SensoreDate.value"}}}, 

{'$group' : {'_id' : "$locationID", 
'AverageTemp' : { '$avg' : '$Readings.temperature.value'}}} 
]) 

и я получил пустые результаты как этот

{u'ok': 1.0, u'waitedMS': 0L, u'result': [{u'AverageTemp': None, u'_id': None}]} 

Я попробовал несколько других комбинаций, но все еще есть пустые результаты.

Следующие запросы возвращают необходимый результат в час, месяц и т.д., но как я группа на два часа интервала вместо одного часа

test_Agg.aggregate([{"$unwind":"$Readings"}, 
{"$project":{    "HourRecord": { "$hour":"$Readings.SensoreDate.value"}, 
          "YearRecord": {"$year":"$Readings.SensoreDate.value"}, 
          "MonthRecord": {"$month":"$Readings.SensoreDate.value"}, 
          "locationID" : 1, 
          "Readings.pH.value":1, 
          'Readings.temperature.value' : 1} 
}, 
{'$group' : {'_id' :"$HourRecord", 
'AverageTemp' : { '$avg' : '$Readings.temperature.value'}} 
}]) 

ответ

0

Второй трубопровод $project в запросе не проецировать требуемые значения используемых в последующих трубопроводах. Следовательно, результат был пуст.

Обязательные поля добавлены в $project. Попробуйте выполнить приведенный ниже запрос.

db.temperature.aggregate([{"$unwind":"$Readings"}, 
{"$project":{    "HourRecord": { "$hour":"$Readings.SensoreDate.value"}, 
          "YearRecord": {"$year":"$Readings.SensoreDate.value"}, 
          locationID : 1, 
          'Readings.temperature.value' : 1} 
}, 
{'$group' : {'_id' : "$locationID", 
'AverageTemp' : { '$avg' : '$Readings.temperature.value'}}}       
]); 

Выход для одного документа, представленного в посте: -

{ 
    "_id" : " WL 001", 
    "AverageTemp" : 16.81 
} 
+0

Спасибо Это работало. Я пробовал это, чтобы группировать показания на каждый час, но как я это делаю каждые два часа. Я пробовал несколько вариантов, но не смог его получить. – user1895915

+0

Спасибо. Что я должен делать, чтобы группироваться каждые два часа, а не $ locationID. Запрос выше работает на каждый час, месяц, неделю? – user1895915

Смежные вопросы