2017-12-10 1 views
0

javascript - mongoose를 사용하고 있습니다. 각 필드MongoDB 각 어린이의 평균을 취득하십시오

{ 
    "_id" : ObjectId("5a2cca1c44ac67e8d5b8d2ff"), 
    "total" : { 
     "timeSpend" : "20" 
    }, 
    "name_1" : { 
     "timeSpend" : 9, 
     "test" : "fail" 
    }, 
    "name_2" : { 
     "timeSpend" : "11", 
     "test" : "fail" 
    }, 
    "name_3" : { 
     "timeSpend" : "8", 
     "test" : "fail" 
    } 
    "__v" : 0 
}, 
{ 
    "_id" : ObjectId("5a2cca1c44ac67e8d5b8d2ff"), 
    "total" : { 
     "timeSpend" : "10" 
    }, 
    "name_1" : { 
     "timeSpend" : 10, 
     "test" : "fail" 
    }, 
    "name_2" : { 
     "timeSpend" : "5", 
     "test" : "fail" 
    }, 
    "name_3" : { 
     "timeSpend" : "2", 
     "test" : "fail" 
    } 
    "__v" : 0 
} 

.... 이상의 문서 ...에 대한 'timeSpend'의 평균을 계산하려고 노력하는 (초급)

나는 (매 10 분, 새로운 문서가 저장됩니다)

{ 
total : 15, 
name_1 : 9.5, 
name_2 : 8, 
name_3 : 5 
} 

내가

012,396,619 시도 : 각 필드에 예를 평균 'timeSpend'을 계산하려고

후 평균 사용하여 루프를 계산하지만이 문서는 10 분마다 업데이트되기 때문에 너무 비싼 컴퓨팅 될 것이라고 생각 당신은 간단한 MongoDB를 함께 그것을 달성 할 수

+0

없음 평균 작동하지 않을 것입니다 다음 "timeSpend": "11". 데이터가 숫자인지 확인하십시오. 실제로는 int 또는 float 중 하나 여야합니다 (여기서 소수점은 필요 없습니다). –

답변

0

(평균 매 10 분을 업데이트해야합니다) 집합체.

결국 하나의 문서를 얻으려면 기본적으로 group by null이어야하고 모든 평균을 얻으려면 $avgaggregation operator을 사용해야합니다.

데이터가 문자열, 예를 들면 인 경우 당신이 찾는 내가 생각하는 방식으로 작동합니다

collection.aggregate([{ 
    $group: { 
     _id: null, 
     total: { 
      $avg: "$total.timeSpend" 
     }, 
     name_1: { 
      $avg: "$name_1.timeSpend" 
     }, 
     name_2: { 
      $avg: "$name_2.timeSpend" 
     }, 
     name_3: { 
      $avg: "$name_3.timeSpend" 
     } 
    } 
}]) 
+0

감사합니다. 나는 'Float'으로 스키마를 변경해야만했다. 그런 다음 모든 것이 잘 작동했다. :) –

관련 문제