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 }]
}]
を、私は日付の指定期間中に指定したページの平均タイミングの結果が欲しいです。例えば
:私は日20170701から、ページ1の平均タイミングデータを必要とする - 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 'も追加されました –
explainationのおかげで – ygjack