[英]mongodb: find summary of records
我有一個名為'tickers'的系列
數據格式為:
{
"_id": ObjectId("50d192b5480cf44157000000"),
"ticker": {
"high": 13.38839,
"low": 13.1225,
"avg": 13.244705635,
"vwap": 13.258414151,
"vol": NumberInt(21562),
"last_all": 13.57334,
"last_local": 13.3324,
"last": 13.3324,
"buy": 13.33185,
"sell": 13.3749
},
"date": ISODate("2012-12-19T10: 11: 01.439Z")
}
從報價和交易中每分鍾插入一次數據。
我想從上面的數據中找出每小時的平均值。
我試過了:
command(array(
'aggregate' => 'tickers',
'pipeline' => array(
array(
'$group' => array(
'_id' => array(
'year'=>'$year($date)',
'month'=>'$month($date)',
'day'=>'$dayOfMonth($date)',
'hour'=>'$hour($date)'
),
'avg' => array( '$avg' => '$ticker.avg') ,
),
)))
但只得到一個記錄:
Array (
[result] => Array (
[0] => Array (
[_id] => Array ( )
[avg] => 13.407843889084 ) )
[ok] => 1
)
期待100天至少100條記錄......
日期運算符必須在$project
操作中使用,而不是$group
,所以你需要這樣做(在shell中):
db.tickers.aggregate(
{ $project: {
_id: 0,
year: {$year: '$date'},
month: {$month: '$date'},
day: {$dayOfMonth: '$date'},
hour: {$hour: '$date'},
avg: '$ticker.avg'
}},
{ $group: {
_id: { year: '$year', month: '$month', day: '$day', hour: '$hour' },
avg: { $avg: '$avg'}
}});
給出的結果是:
{
"result": [
{
"_id": {
"year": 2012,
"month": 12,
"day": 19,
"hour": 10
},
"avg": 13.244705635
}
],
"ok": 1
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.