MongoDB で通常の「検索」クエリを実行すると、返されたカーソルに対して「カウント」を実行することで、(制限に関係なく) 結果の合計数を取得できます。したがって、結果セットを 10 に制限しても (たとえば)、結果の総数が 53 であることがわかります (これもたとえば)。
ただし、正しく理解していれば、集計フレームワークはカーソルを返さず、単に結果を返します。それで、$limit
パイプライン演算子を使用した場合、上記の制限に関係なく、結果の総数をどのように知ることができますか?
集計を 2 回実行できると思いますが (1 回は を介して結果をカウントし、$group
1 回$limit
は実際の限定された結果をカウントします)、これは非効率的です。
$group
別のアプローチとして、操作の前に( を介して) 結果の総数をドキュメントに添付することもできますが$limit
、この数はすべてのドキュメントに添付されるため (セットに対して 1 回だけ返されるのではなく)、これも非効率的と思われます。
ここで何か不足していますか?何か案は?ありがとう!
たとえば、これがクエリの場合:
db.article.aggregate(
{ $group : {
_id : "$author",
posts : { $sum : 1 }
}},
{ $sort : { posts: -1 } },
{ $limit : 5 }
);
( の前に) 利用可能な結果の数を知るにはどうすればよい$limit
ですか? 結果はカーソルではないので、単にカウントすることはできません。