グループとソートされた集計のトップ10と最後の10の結果を表示する必要があるユースケースがあります。私は$limit
を使用しようとしましたが、次のアグリゲーターが完全なデータを処理することはできません。MongoDBコレクションから最初のNレコードと最後のNレコードを取得します
db.collection.aggregate([groupAggregator, sortAggregator, { $limit: 10 }, /*only 10 records available*/]
パイプラインの途中でコレクション全体で集計を実行するにはどうすればよいですか?私はMongoDB 3.2.9
を使用しています。それが不可能ならUNION 2件の集計top 10 (ASC SORTED)
2つ目last 10 (DESC SORTED)
である第1の1の方法があり
は、グループ集計のためにそれをがなかったら、私はdb.collection.find({}).sort().filter()
戦略を使用していただろうが、グループが行う必要があります。グループ集合から得られる
データは
{_id: "", ..., avg_count: 10}
{_id: "", ..., avg_count: 1}
{_id: "", ..., avg_count: 2}
{_id: "", ..., avg_count: 5}
{_id: "", ..., avg_count: 8}
{_id: "", ..., avg_count: 3}
{_id: "", ..., avg_count: 4}
{_id: "", ..., avg_count: 6}
{_id: "", ..., avg_count: 7}
{_id: "", ..., avg_count: 9}
データソート集合から得
{_id: "", ..., avg_count: 1}
{_id: "", ..., avg_count: 2}
{_id: "", ..., avg_count: 3}
{_id: "", ..., avg_count: 4}
{_id: "", ..., avg_count: 5}
{_id: "", ..., avg_count: 6}
{_id: "", ..., avg_count: 7}
{_id: "", ..., avg_count: 8}
{_id: "", ..., avg_count: 9}
{_id: "", ..., avg_count: 10}
所望の出力:
はFETCH FIRST 2と最後の2文書
{_id: "", ..., avg_count: 1}
{_id: "", ..., avg_count: 2}
{_id: "", ..., avg_count: 9}
{_id: "", ..., avg_count: 10}
注:上記だけのサンプルデータであり、実際のデータは、正確なシリアル番号を持っていません。
あなたはおそらく、いくつかのSAMを追加することができます。確かにMongoDBはうまくソート/制限の組み合わせを最適化することが可能であろうような方法より速いだろう(のみ以降V3.4から)$facetを使用するにはプレデータと目的の出力?あなたの説明に基づいて、私はあなたが何をしているかを正確に把握するのに苦労しています。 – dnickless
@dnickless最新の質問をご確認ください。 –