2015-01-29 5 views
0

내가 MongoDB에 대한 집계 연산 결과의 개체가 결과 일 시간 시리즈 누락 추가, 결과는이 같은 것입니다 나는 20 월부터 시작 일주일의 범위에 대한 요구한다면, 예를 들어 내가이 같은 결과 객체가 싶습니다은 자바 스크립트가

[ 
"2015-01-20T00:00:00.000Z", 
"2015-01-21T00:00:00.000Z", 
"2015-01-22T00:00:00.000Z", 
"2015-01-23T00:00:00.000Z", 
"2015-01-24T00:00:00.000Z", 
"2015-01-25T00:00:00.000Z", 
"2015-01-26T00:00:00.000Z", 
] 
:

[ 
    { 
     "_id": { 
      "action": "hit", 
      "date": "2015-01-20T00:00:00.000Z" 
     }, 
     "avg": 3, 
     "min": 3, 
     "max": 3, 
     "total": 3 
    }, 
    { 
     "_id": { 
      "action": "hit", 
      "date": "2015-01-21T00:00:00.000Z" 
     }, 
     "avg": 0, 
     "min": 0, 
     "max": 0, 
     "total": 0 
    }, 
    { 
     "_id": { 
      "action": "hit", 
      "date": "2015-01-22T00:00:00.000Z" 
     }, 
     "avg": 0, 
     "min": 0, 
     "max": 0, 
     "total": 0 
    }, 
    { 
     "_id": { 
      "action": "hit", 
      "date": "2015-01-23T00:00:00.000Z" 
     }, 
     "avg": 1, 
     "min": 1, 
     "max": 1, 
     "total": 12 
    }, 
    {...} 
] 

날짜와 배열이 다양 것은 이것이다

이 배열의 각 날짜에 이전 결과에 0 값 개체를 추가해야합니다.

나는 밑줄과 map/reduce/clone으로 무언가를 시도했지만 올바른 결과를 얻을 수 없다.

도움이 필요하십니까?

+0

어디에서 문제가 있습니까? –

+0

밑줄을 사용하여이를 수행하는 방법을 이해할 수 없지만 결과에 있어야하는 모든 날짜의 배열이 있지만 mongodb 결과와 교차 할 수는 없습니다. –

+0

배열을 게시 할 수도 있습니다. – Mritunjay

답변

1

나는 그것을했다. 그러나 나는 0 값을 더하는 것을 그리워한다, 나는 그것을 지금 할 것이다.

 var cloneItem = {}; 

     // Generate the date range arrays with single days 
     var range = moment().range(new Date(req.query.datefrom), new Date(req.query.dateto)), 
      days = []; 
     range.by('days', function(moment) { 
      days.push(moment.startOf('day').format()); 
     }); 

     // Rewrite dates to match the same date range format from the array above 
     webstat = _.map(webstat, function (value, key, list) { 
      value._id.date = moment(value._id.date).startOf('day').format(); 
      if (key === 0) cloneItem = value; 
      return value; 
     }); 

     // Add the object values when they are missed    
     days.forEach(function (day) { 
      var clone = _.extend({}, cloneItem, {_id: {action: cloneItem._id.action, date: day}}); 

      if (_.findWhere(webstat, {_id: { date: day}}) === undefined) { 
       webstat.push(clone); 
      } 
     }); 

     // Sort by date and send it 
     res.jsonp(
      _.sortBy(webstat, function (item) { 
       return item._id.date; 
      }) 
     );