2016-04-14 1 views
0

小さなテストサイトでは、ユーザーが1日に特定のリンクグループを積極的に費やしているほぼ時間を記録したいと思います。すべてのユーザーに Thereofore私はこのような文書を保存クリックします。mongoの時間をソートして合計する

例の文書:

アイデアは、時間によってソートこれらの、ある日のすべての文書をフィルタリングし、時間の連続期間を返すことです
{ 
"routeGroup": "a", 
"time": new Date() 
} 

ユーザーはrouteGroupに費やしています。

例:

次のドキュメント(すでに日でソートされ、時間によってフィルタ)を考える:

{"routegroup": "a", "time": 11:30:00}, 
{"routegroup": "a", "time": 11:31:00}, 
{"routegroup": "a", "time": 11:32:00}, 

{"routegroup": "b", "time": 11:33:00}, 
{"routegroup": "b", "time": 11:34:00}, 

{"routegroup": "a", "time": 11:35:00}, 

{"routegroup": "b", "time": 11:36:00}, 

{"routegroup": "a", "time": 11:37:00}, 
{"routegroup": "a", "time": 11:38:00}, 
{"routegroup": "a", "time": 11:39:00} 

したがって、ユーザーは、第1グループの3分を費やしています「」2分で続きますグループ「b」、グループ「a」の1分など。時間の

これらの期間は秒まで敏感であり、私はその後のようなものを合計して返すしたいと思います:

// total time spend in routeGroups on day x 

{"routegroup": "a", "timeTotal": "7:00"}, 
{"routegroup": "b", "timeTotal": "3:00"} 

質問:はこれが可能であるとどのように、もし?

ご協力いただきありがとうございます。

集約フレームワークは、あなたの期待の答え与えることができますマフ

+0

1分ごとに記録されたアイテムがある場合は、必ずグループごとの合計数が必要です。はい?ブラウザのクライアントコードで集約が効率的に行われることを期待しないでください。これはサーバーにとっての仕事であり、問​​題を単純な意味に分解すると、非常に単純な答えが簡単に見つかります。 –

+0

デモンストレーションのために選んだ分の間隔 - 秒も尊重する必要があります。クエリはサーバー上で実行されます。 – Raggamuffin

+0

@NeilLunnと同様に、ロギング間隔が一定(X分またはX秒)であれば、回答は単なるグループあたりの合計数になります。したがって、ここでの質問は、あなたのイベント間隔が一定または可変である場合です。 – joao

答えて

1

db.times.aggregate([ 
    {$group: {_id: '$routegroup', timeTotal: {$sum : 1}}}, 
    {$project: {_id: 0, routegroup: '$_id', timeTotal: 1}} 
]) 

をこれは保存され、各レコードは、ユーザーのアクティビティの約1分であり、あなたは合計で主に懸念しているということを前提としていませんあなたの質問/予期した結果が示唆している最大連続時間ではなく、1日あたりの時間。

+0

ありがとうございますが、分単位でこの例を簡略化しました。 'timeTotal'は秒単位で分かります。 – Raggamuffin

+0

私は参照しています...あなたのスキーマを変更して、訪問ごとに一意の経路グループを作成することができますか?{"routegroup": "a"、visitId:1、 "time":11:30:00}、{"routegroup" "a"、visitId:1、 "time":11:31:00}、{"routegroup": "a"、visitId:1、 "time":11:32:00}、 {"routegroup" "b"、visitId:2、 "time":11:33:00}、 {"routegroup": "b"、visitId:2、 "time":11:34:00}などですそれをグループ化して最小/最大値を選択し、その差を計算するためにクエリを変更できるようにしてください。そうでなければ、ソートされたリストを持っていれば、クライアントのmongodbの外でこれをやらなければならないと思います。 –

+0

ああ、同じグループのエントリーのすべてのブロックがIDを取得するように - ありがとう! – Raggamuffin