1

私は2つの文書を持っています:

アプリケーション (表示とは関係ありません)、およびスキャン:

{
  application_id: 'xxx'
}

すべてのアプリケーションをスキャン数でソートしたいと思います。

SQL を使用すると、次の行の中で何かを実行できます。

SELECT applications.*, COUNT(scans.*) as scans_count FROM applications
LEFT JOIN scans ON scans.application_id = applications.id
GROUP BY applications.id
ORDER BY scans_count

mongo の集約フレームワークではこれが許可されていないようです。

いくつかのオプション:

マップ/リデュース

これがここで関連しているかどうかはわかりません。map/reduce はちょっと遅いので、答えを非常に速くする必要があります。

アプリケーション内にスキャン文書を埋め込む

スキャンにグローバルにアクセスする必要があるため不可能

アプリケーション ドキュメントにフィールドを追加して、スキャン数を追跡します。

これはうまくいくかもしれませんが、条件によっては、いつかいくつかのスキャンだけをカウントしたい場合、問題が再び発生します

私はmongodbにかなり慣れていませんが、私の問題に対する最良の解決策は何ですか? 私のスキーマはリレーショナルすぎますか? もしそうなら、どうすれば改善できますか?

4

1 に答える 1

2

最も簡単で柔軟なオプションは、次の 2 つの手順で行うことです。

  1. カウントでソートされた、値とスキャン カウントを取得するためのaggregateクエリ。scansapplication_id
  2. これらの のアプリケーションを取得するために使用するfindクエリ。applications$inapplication_id

一度に 1 つのコレクションにしかクエリを実行できないため、結合のようなものはすべて、スキーマを作り直して 1 つのコレクションで必要なものすべてを取得するか、複数のクエリを使用する必要があります。

于 2013-04-30T13:14:41.253 に答える