例えば、以下のような集計パイプラインを使用して、2ページ目のドキュメントを取得することができます。
db.collection.aggregate([
{ $skip: 10 }, // 10件のドキュメントをスキップ
{ $limit: 10 }
// 10件のドキュメントを返す
])
次に、ファセット機能を実現するためには、$facet演算子を使用します。$facet演算子は、複数の集計ステージを同時に実行し、各ステージの結果を個別のフィールドとして返します。
例えば、以下のような集計パイプラインを使用して、カテゴリごとのドキュメント数を取得することができます。
db.collection.aggregate([
{
$facet: {
categories: [
{ $group: { _id: "$category", count: { $sum: 1 } } }
]
}
}
])
この例では、categories
というフィールドにカテゴリごとのドキュメント数が格納されます。
ページネーションとファセットを組み合わせる場合、以下のような集計パイプラインを使用することができます。
db.collection.aggregate([
{ $skip: (page - 1) * pageSize },
{ $limit: pageSize },
{
$facet: {
categories: [
{ $group: { _id: "$category", count: { $sum: 1 } } }
]
}
}
])
この例では、指定したページサイズとページ番号に基づいてドキュメントを取得し、同時にカテゴリごとのドキュメント数も取得します。
以上がMongoDBでのページネーションとファセット機能を実現する方法です。これらの例は参考になるかと思いますが、実際の使用にはアプリケーションの要件に合わせて調整する必要があります。