0

DB からフィルター処理された不動産のリストを取得し (価格、場所などでフィルター処理)、すべての不動産の最小/最大/平均価格と合計数量を示す分析テーブル (集計フレームワークを介して作成) を表示する必要があります。最後に必要なものの簡単な例:

realties = [{_id: 1, price: 2500}, {_id: 1, price: 2500}, ... ];
stats = {total: 12500, max_price: 250000, min_price: 10000, avg_price: 150000};

それを行う最善の方法は何ですか?ご覧のとおり、同じクエリを 2 回作成する必要があります。1 回目は、DB からページ分割された結果を取得するときです。次に、集計フレームワークで同じ条件を「$match」に入れる必要がありますか?:

realteis = db.collection.where({city: "NYC", type: 2, ...}).skip(100).limit(25)
stats = db.collection.aggregation({$match: {city: "NYC", type: 2, ...}, $group: {...}} )

したがって、これらはDBに対する2つのほぼ同一のクエリであり、私にはあまり効果的ではないようであり、より良いアプローチがあると思います.

フィルタリングされた結果を最初のクエリから集計フレームワークに「チェーン」する方法はありますか?

それとも、他のツールを使用した方が良いのでしょうか? (しかし、とにかくMongoが必要です)。

4

1 に答える 1

1

残念ながら、既存の find() の結果を集計フレームワーク ジョブに自動的に「チェーン」する方法はありません。1 つのアプローチは、find() の結果を繰り返し処理し、それぞれを新しい一時コレクションに挿入することです。次に、フィルタリングされた結果を使用して、一時コレクションに対して集約フレームワーク ジョブを実行します。これにより、より大きなデータセットを 2 回クエリする必要が確実に最小限に抑えられます。

計算しようとしている統計は非常に単純なので、アプリケーション コードで合計、最小、最大、および平均をインラインで計算することができます。

于 2013-10-05T16:16:50.390 に答える