2016-01-06 3 views
0

У меня есть следующий MongoDB документыMongoDB группа и сортировать по дате от поддокументе

{ 
    "_id" : ISODate("2016-01-04T23:00:11.000+0000"), 
    "value" : { 
     "hour" : ISODate("2016-01-04T23:00:00.000+0000"), 
     "day" : ISODate("2016-01-04T00:00:00.000+0000"), 
     "time" : ISODate("2016-01-04T23:00:11.000+0000"), 
     "day_chan1" : 90.162, 
     "day_chan2" : 77.547, 
     "day_chan3" : 79.32, 
     "total_day_chan" : 247.029 
    } 
} 
{ 
    "_id" : ISODate("2016-01-04T23:00:23.000+0000"), 
    "value" : { 
     "hour" : ISODate("2016-01-04T23:00:00.000+0000"), 
     "day" : ISODate("2016-01-04T00:00:00.000+0000"), 
     "time" : ISODate("2016-01-04T23:00:23.000+0000"), 
     "day_chan1" : 90.167, 
     "day_chan2" : 77.549, 
     "day_chan3" : 79.322, 
     "total_day_chan" : 247.038 
    } 
} 
{ 
    "_id" : ISODate("2016-01-04T23:00:35.000+0000"), 
    "value" : { 
     "hour" : ISODate("2016-01-04T23:00:00.000+0000"), 
     "day" : ISODate("2016-01-04T00:00:00.000+0000"), 
     "time" : ISODate("2016-01-04T23:00:35.000+0000"), 
     "day_chan1" : 90.172, 
     "day_chan2" : 77.551, 
     "day_chan3" : 79.324, 
     "total_day_chan" : 247.047 
    } 
} 

, где я хочу, чтобы сгруппировать и отсортировать документы, основанные на день поддокументе, поэтому все данные из того же дня придут в массиве.

До сих пор я попытался с помощью

.aggregate([{ 
         '$sort': { 
          '_id': 1 
         } 
        }, 
        { 
         '$group' : { 
          '_id': '$value.day', 
          'data': {          
           '$push' : '$value' 
          } 
         } 

        },       
        { 
         '$project': { 
          '_id' : 1, 
          'data':1 
         } 
        } 
     ]); 

Но я заметил, данные из двух отдельных дат, вступающих в тот же массив

Вот что я получаю в один из массивов

{ hour: Tue Jan 05 2016 00:00:00 GMT+0000 (GMT), 
    day: Tue Jan 05 2016 00:00:00 GMT+0000 (GMT), 
    time: Tue Jan 05 2016 00:00:12 GMT+0000 (GMT), 
    day_chan1: 91.635, 
    day_chan2: 78.274, 
    day_chan3: 80.062, 
    total_day_chan: 249.971 } 
{ hour: Mon Jan 04 2016 23:00:00 GMT+0000 (GMT), 
    day: Mon Jan 04 2016 00:00:00 GMT+0000 (GMT), 
    time: Mon Jan 04 2016 23:00:11 GMT+0000 (GMT), 
    day_chan1: 90.162, 
    day_chan2: 77.547, 
    day_chan3: 79.32, 
    total_day_chan: 247.029 } 

Но в идеале эти два должны быть в отдельных массивах

  [{ hour: Tue Jan 05 2016 00:00:00 GMT+0000 (GMT), 
     day: Tue Jan 05 2016 00:00:00 GMT+0000 (GMT), 
     time: Tue Jan 05 2016 00:00:12 GMT+0000 (GMT), 
     day_chan1: 91.635, 
     day_chan2: 78.274, 
     day_chan3: 80.062, 
     total_day_chan: 249.971 }, { 
},{ hour: Tue Jan 05 2016 00:0:00 GMT+0000 (GMT), 
     day: Tue Jan 05 2016 00:00:00 GMT+0000 (GMT), 
     time: Tue Jan 05 2016 01:01:12 GMT+0000 (GMT), 
     day_chan1: 91.635, 
     day_chan2: 78.274, 
     day_chan3: 80.062, 
     total_day_chan: 249.971 }], 
    [{ hour: Mon Jan 04 2016 23:00:00 GMT+0000 (GMT), 
     day: Mon Jan 04 2016 00:00:00 GMT+0000 (GMT), 
     time: Mon Jan 04 2016 23:00:11 GMT+0000 (GMT), 
     day_chan1: 90.162, 
     day_chan2: 77.547, 
     day_chan3: 79.32, 
     total_day_chan: 247.029 }] 

Все документы за тот же день будут собраны в массиве

[Array for Date1, Array for Date2, Array for date3] и т. Д.

+1

Можете ли вы показать нам, каков ваш ожидаемый результат и что вы получаете от команды? – dikesh

+0

Я выполняю ту же команду, что и вы, и получаю правильный результат. – dikesh

+0

У меня 40 000 документов, поэтому ошибка возникает в какой-то момент. – Bazinga777

ответ

1

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

{ 
    "_id" : ISODate("2016-01-05T00:00:00Z"), 
    "data" : [ 
     { 
      "hour" : ISODate("2016-01-05T23:00:00Z"), 
      "day" : ISODate("2016-01-05T00:00:00Z"), 
      "time" : ISODate("2016-01-05T23:00:11Z"), 
      "day_chan1" : 90.162, 
      "day_chan2" : 77.547, 
      "day_chan3" : 79.32, 
      "total_day_chan" : 247.029 
     } 
    ] 
} 
{ 
    "_id" : ISODate("2016-01-04T00:00:00Z"), 
    "data" : [ 
     { 
      "hour" : ISODate("2016-01-04T23:00:00Z"), 
      "day" : ISODate("2016-01-04T00:00:00Z"), 
      "time" : ISODate("2016-01-04T23:00:23Z"), 
      "day_chan1" : 90.167, 
      "day_chan2" : 77.549, 
      "day_chan3" : 79.322, 
      "total_day_chan" : 247.038 
     }, 
     { 
      "hour" : ISODate("2016-01-04T23:00:00Z"), 
      "day" : ISODate("2016-01-04T00:00:00Z"), 
      "time" : ISODate("2016-01-04T23:00:35Z"), 
      "day_chan1" : 90.172, 
      "day_chan2" : 77.551, 
      "day_chan3" : 79.324, 
      "total_day_chan" : 247.047 
     } 
    ] 
} 

Так что, по моему мнению, я не мог найти никакой проблемы.

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