私はMongoDBでかなり難しいことが証明された何かを達成しようとしています。
私は2つのコレクションを持っています。1つは「マーカー」と呼ばれ、もう1つは「ルート」と呼ばれ、ユーザーがマーカー間に作成したルートを保持します。ルートコレクションには、[start_marker]と[end_marker]の2つの重要なフィールドがあります。これらのフィールドは、マーカーコレクション内のマーカーの_idです。
地図を閲覧するとき、アプリはマーカーコレクションに対して地理空間ボックスクエリを実行して、地図上のマーカーを見つけて表示します。
ユーザーがマーカーをクリックすると、バブルにマーカー名が表示されます。
名前の下には、私が問題を抱えている動的フィールドもあります。このフィールドは次のように表示されます。
- マップ上で選択したマーカーからどのマーカーに誘導されたか
- それらのマーカーが何回駆動されたか
- マーカーに最も頻繁に駆動される3つだけが動的フィールドに表示されます
レコードコレクションには[start_marker]と[end_marker]_idsが記録されているため、[start_marker]フィールドで選択したマーカーの_idをレコードコレクションに照会します。
これにより、選択したマーカーが常に[start_marker]フィールドにある数百のドキュメントが生成されます。ここで、最も発生する[end_markers]を並べ替え、発生回数をカウントし、上位3つを選択し、それらの_idを取得して、マーカーコレクションにクエリを実行してマーカー名を抽出します。
問題は、カウントには、カウントするエンドマーカーフィールドを知る必要があり、そのため、それが発生する頻度を知る必要があります。キャッチ22。
エンドバブルの結果は次のようになります。
シティ1
シティ16-256回
シティ21-118回
シティ4-88回
Mongoはスキーマレスであるため、データベース構造を変更することはできます。カウントフィールドをどこかに追加することもできますが、現時点では完全に途方に暮れています。このクエリは1秒間に数百回発生するため、mapreduceはデータベースのパフォーマンスに悪影響を与える可能性があります。いくつかの入力をいただければ幸いです!