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" 
} 

내 목표는 다음 달, 년 주당, 매 2 시간 간격의 평균 온도를 계산하는이 데이터를 몽고 집계에 새로운 오전있다. 다양한 쿼리를 시도했지만 행운이 없습니다. 이것은 내가 지금까지

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

덕분에이 일했다. 나는 매 시간마다 수치를 그룹화하려고 시도했지만 매 2 시간마다 그것을 어떻게 할 것인가. 몇 가지 옵션을 시도했지만 얻을 수는 없습니다. – user1895915

+0

감사합니다. $ locationID가 아닌 두 시간 간격으로 그룹화하려면 어떻게해야합니까? 위의 쿼리는 매시간, 매월, 주마다 작동합니까? – user1895915