I have collection like below:
[{
date: '20170721',
pageUrl: 'page1',
timing: [{ name: 'dns', duration: 1000 }, { name: 'tcp', duration: 2000 }]
}, {
date: '20170721',
pageUrl: 'page2',
timing: [{ name: 'dns', duration: 1001 }, { name: 'tcp', duration: 1800 }]
}, {
date: '20170722',
pageUrl: 'page1',
timing: [{ name: 'dns', duration: 1021 }, { name: 'tcp', duration: 1700 }]
}, {
date: '20170722',
pageUrl: 'page2',
timing: [{ name: 'dns', duration: 1101 }, { name: 'tcp', duration: 1850 }]
}]
and I want the result of average timing of a given page during a given period of date.
For example: I need average timing data of page1, from date 20170701 - 20170731
And the expected output should like:
[{
_id: '20170701',
dns: <avgDuration>,
tcp: <avgDuration>
}, {
_id: '20170702',
dns: <avgDuration>,
tcp: <avgDuration>
},
...
]
what I tried is, and it didn't work:
db.myCollection.aggregate([
{ $match: { 'pageUrl': targetPageUrl } },
{ $group: {
_id: '$date',
dns: { $avg: '$timing.0.duration' },
tcp: { $avg: '$timing.1.duration' }
},
...
])
Anybody could help? Please