1
多個平均值我有收集象下面這樣:在日期一定時期內如何從匹配的元素得到陣列
[{
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 }]
}]
,我想給定頁面的平均時間的結果。
例如:我需要第1頁的平均時間的數據,從日期20170701 - 20170731
和預期產出想:
[{
_id: '20170701',
dns: <avgDuration>,
tcp: <avgDuration>
}, {
_id: '20170702',
dns: <avgDuration>,
tcp: <avgDuration>
},
...
]
是我的嘗試是,它沒有工作:
db.myCollection.aggregate([
{ $match: { 'pageUrl': targetPageUrl } },
{ $group: {
_id: '$date',
dns: { $avg: '$timing.0.duration' },
tcp: { $avg: '$timing.1.duration' }
},
...
])
有人可以幫忙嗎?請
非常感謝。我可能知道爲什麼'$ timing.0.duration'在這裏不支持? – ygjack
@ygjack它從來沒有過。雖然使用索引值的「點符號」形式對於「查詢」和「投影」有效,但它對於聚合框架永遠無效。只有從MongoDB 3.2開始,它實際上有效地得到一個「數組」,以響應諸如「$ timing.duration」之類的東西,並且在引入時'$ arrayElemAt'也被添加了。 –
感謝您的解釋 – ygjack