MongoDBでのページネーションとファセット機能を使用した集計


例えば、以下のような集計パイプラインを使用して、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でのページネーションとファセット機能を実現する方法です。これらの例は参考になるかと思いますが、実際の使用にはアプリケーションの要件に合わせて調整する必要があります。