私は1日に5秒ごとにデータポイントを含むデータセットを持っています。これにより、データセットはになります。 このセットは大きすぎるので、私はそれを小さくしたい(私はこれらのアイテムを使ってグラフを描いている)。Symfony/Doctrine/MongoDBすべてのN番目のアイテムを取得する
グラフのx軸は時間が経過しているので、データポイントごとに5分のギャップがあると判断しました。これは1日にデータポイントに戻ります。グラフを作るには十分に少なく、十分です。
私はMongoCollectionは、次のようになります。
{
"timestamp":"12323455",
"someKey":123,
"someOtherKey": 345,
"someOtherOtherKey": 6789
}
データをデータベースに5秒ごとに掲載されます。タイムスタンプは結果ごとに5秒ずつ異なります。
私のX軸は5分のシーケンスで分けられているので、これらの5分間に平均値someKey
,someOtherKey
およびsomeOtherOtherkey
を計算したいと思います。 この新しい平均値はグラフのデータポイントの1つになります。
1つのデータポイントをすべて平均して5分間隔で取得するにはどうすればよいですか? (1日に288データポイント)。
$result = $collection
->createQueryBuilder()
->field('timestamp')->gte($todayMidnight)
->sort('timestamp', 'DSC')
->getQuery()
->execute();
どのようにして、5分ごとのためのデータポイント(および取得するために(同じクエリ内)データのこのリストをフィルタリングします:今、私はこの日深夜からすべての文書を選択していますについては
データポイントはこれらの5分以内のポイントの平均です)?
のdoctrineで構築されたこのクエリをsymfonyアプリケーションで使用するとよいでしょう。
EDIT 私はmongoshellの作業の中で最初にクエリを取得しようとしました。 提案のコメントと同様に、私はaggregationを使い始めるべきです。
私はこれまでstackoverflow
で、ここで尋ねた別の質問に基づいています。これは、現在のクエリで行ったクエリ:
db.Pizza.aggregate([
{
$match:
{
timestamp: {$gte: 1464559200}
}
},
{
$group:
{
_id:
{
$subtract: [
"$timestamp",
{"$mod": ["$timestamp", 300]}
]
},
"timestamp":{"$first":"$timestamp"},
"someKey":{"$first":"$someKey"},
"someOtherKey":{"$first":"$someOtherKey"},
"someOtherOtherKey":{"$first":"$someOtherOtherKey"}
}
}
])
このクエリは私に各300秒間、最後の結果が得られます(5分)今日の真夜中から。クエリがを返す必要があります
{
"timestamp":"1464559215",
"someKey":123,
"someOtherKey": 345,
"someOtherOtherKey": 6789
},
{
"timestamp":"1464559220",
"someKey":54,
"someOtherKey": 20,
"someOtherOtherKey": 511
},
{
"timestamp":"1464559225",
"someKey":654,
"someOtherKey": 10,
"someOtherOtherKey": 80
},
{
"timestamp":"1464559505",
"someKey":90,
"someOtherKey": 51,
"someOtherOtherKey": 1
}
: 私たちは、この例のデータセットを取るもしそうなら、それはそれらの300秒以内にすべての文書を取得し、列someKey
、someOtherKey
上の平均値を計算するためにsomeOtherOtherKey
をしたいですすなわち、行:最初の結果は次のように計算される
{
"timestamp":"1464559225",
"someKey":277,
"someOtherKey": 125,
"someOtherOtherKey": 2460
},
{
"timestamp":"1464559505",
"someKey":90,
"someOtherKey": 51,
"someOtherOtherKey": 1
}
:
Result 1 - someKey = (123+54+654)/3 = 277
Result 1 - someOtherKey = (345+20+10)/3 = 125
Result 1 - someOtherOtherKey = (6789+511+80)/3 = 2460
集計関数を使用してmongoshell内でこの計算を行う方法を教えてください。ここで私は私が望んでいた正確に何を得ることができたのstackoverflow上の所定answeresに基づいて
これは集約フレームワークの仕事のように聞こえますが、使用しようとしましたか? – malarzm
どのようにして集約フレームワークを使用しますか?私はグループを使用しようとしましたが、私は固執しました:/ – Baklap4
私はそれ自身に堪能ではありません。おそらくドキュメントやその他の問題がいくつか出てくるでしょう:) Doctrineで集約を使用することについては、砂糖はまだ(水分補給のための未完成のPRがありますが)それを使用することは可能です。 – malarzm