2016-05-04 7 views
3

私はタイムスタンプ付きのログセットを持っており、存在しない「仮想セッション」によってそのログをグループ化する必要があります。

前のセッションの最後のログインから最初のログインまでの時間が半時間になると、新しいグループ化されたセッションが開始されます。

たとえば、私たちは、データのセットを次のようしている:それは2つの仮想セッションでグループ化する必要があり

[ 
{ 
    id: "b4f0d0d7-495b-48db-95bf-d5ac0c8c9e9b" 
    time: 1461872894322 
    timestamp: "Apr 28, 2016 7:48:14 PM", 
}, 
{ 
    id: "bf55ca2f-b544-406c-bed6-766a1204683d" 
    time: 1461872937941 
    timestamp: "Apr 28, 2016 7:48:57 PM" 
}, 
{ 
    id: "7f2ab420-0434-46f8-9444-6e2ffa73aea8" 
    time: 1461873088155 
    timestamp: "Apr 28, 2016 7:51:28 PM" 
}, 
{ 
    id: "dd31124c-0375-454a-acca-c239465a2b22" 
    time: 1461839257257 
    timestamp: "Apr 28, 2016 10:27:37 AM" 
}, 
{ 
    id: "a4370974-bfea-408f-aa69-973961e9f058" 
    time: 1461839281324 
    timestamp: "Apr 28, 2016 10:28:01 AM" 
} 
] 

を。グループ化の結果、mongo集合$ groupの各グループの最小時間と最大時間を得ることができますが、正しい式を書く方法は?

予想される答えは残念ながら(CTE共通テーブル式のような)前の行にはハンドルがありませんようMongoのクエリでそれを行うための方法はありません

[ 
{min: 1461872894322, max: 1461873088155}, 
{min: 1461839257257, max: 1461839281324} 
] 

答えて

1

のようなものです。

この問題を解決するには、データクライアント側(またはSQLワールドのSPのようなmongoコンソールのjavascriptを使用)を処理し、すべての文書に対して、時間差をチェックし、グループ化インジケータをコレクションに追加する必要があります。 次に、グループ化インジケーターを追加してグループ化することができます。

外部変数にアクセスできるので$ letを訴えることを考えていましたが、これはROアクセスであり、私たちはこれを中継することはできません。

楽しくお過ごしください! コメント歓迎します。

+0

これはまさに私がその状況について考えるものです。 – Gugic