sql >> データベース >  >> NoSQL >> MongoDB

MongoDBアグリゲーションを使用したイベントのコレクションからの線形ファネル、それは可能ですか?

    MongoDBブログに完全な回答を書きました しかし、要約すると、あなたがしなければならないことは、あなたが気にかけているものに基づいてあなたの行動を投影し、行動フィールドの値を適切なキー名にマッピングし、3つの行動を実行したときに人ごとにグループ化します(そしてオプションで何回)次に、action2がaction1の後に実行され、action3がaction2の後に実行されたかどうかを確認する新しいフィールドを投影します...最後のフェーズでは、1、1、2、または1、2、および次に3。

    関数を使用して集計パイプラインを生成すると、渡されたアクションの配列に基づいて結果を生成できます。

    私のテストケースでは、パイプライン全体が200ミリ秒未満で実行され、40,000のドキュメントが収集されました(これは私の小さなラップトップにありました)。

    正しく指摘されたように、私が説明する一般的な解決策は、アクターがアクションを複数回実行できる一方で、アクション1からアクション2に進むことしかできないが、アクション1からアクション3に直接スキップすることはできないことを前提としています( action2を実行するまで、action3を実行することはできません。

    結局のところ、集約フレームワークは、順序が完全に任意であるイベントのシーケンスにも使用できますが、ある時点でシーケンスaction1、action2、action3を実行した人の数を知りたい場合もあります。

    元の答えに対して行う主な調整は、中央に2段階のステップを追加することです。この手順では、収集された個人ドキュメントを解凍して再グループ化し、に続く2番目のアクションの最初の発生を見つけます。 最初のアクションの最初の発生。

    最終的な比較がaction1になり、次にaction2が最も早く発生し、それをaction3の最新の発生と比較します。

    おそらく、任意の数のイベントを処理するように一般化できますが、2つを超えるイベントが追加されるたびに、集計にさらに2つのステージが追加されます。

    これが私の記事ですパイプラインの変更 あなたが探している答えを達成するために。




    1. MongoDB-増分値の代わりに一意の識別子として12バイトの文字列を使用する利点

    2. 私のmongodbがポート28017に接続しないのはなぜですか?

    3. MongoDB結果クエリをフラット化することは可能ですか?

    4. 共有フォルダーでMongoを実行しているBoot2Docker(Windowsの場合)(このファイルシステムはサポートされていません)