aggregation framework - Mongodb group and sort by date from subdocument -
i have following mongodb documents
{ "_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 } } where want group , sort documents based on day subdocument, data same day come out in array.
so far tried using
.aggregate([{ '$sort': { '_id': 1 } }, { '$group' : { '_id': '$value.day', 'data': { '$push' : '$value' } } }, { '$project': { '_id' : 1, 'data':1 } } ]); but noticed data 2 seperate dates coming same array
here inside 1 of arrays
{ 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 } but ideally these 2 should in seperate arrays
[{ 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 }] all documents same day collected in array
[array date1, array date2, array date3 ] , on.
the example documents have provided of same dates. changed date of 1 of document , ran command have provide , got following result.
{ "_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 } ] } so according me not find problem.
Comments
Post a Comment