У меня есть следующий 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] и т. Д.
Можете ли вы показать нам, каков ваш ожидаемый результат и что вы получаете от команды? – dikesh
Я выполняю ту же команду, что и вы, и получаю правильный результат. – dikesh
У меня 40 000 документов, поэтому ошибка возникает в какой-то момент. – Bazinga777