MongoDB の結果をソートして制限する

MongoDBMongoDBBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、MongoDB のクエリ結果をソートして制限する方法を学びます。この実験では、単一のフィールドでドキュメントをソートし、複数のソートキーを使用し、結果の数を制限し、ドキュメントをスキップし、結果の数をカウントする方法について説明します。これらの技術は、MongoDB でデータを整理し管理するために不可欠であり、データベースから情報を効果的に取得し分析することができます。

この実験では、まず単一のフィールドでドキュメントを昇順と降順の両方でソートする方法を示します。次に、複数のソートキーの使用方法を調べ、より複雑なソート条件を作成できるようにします。また、返される結果の数を制限し、特定の数のドキュメントをスキップし、結果の総数をカウントする方法を学びます。これらのスキルは、MongoDB のクエリを最適化し、特定のニーズに合わせた出力を調整するために重要です。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/QueryOperationsGroup -.-> mongodb/sort_documents("Sort Documents") mongodb/DataTypesGroup -.-> mongodb/use_numeric_data_types("Use Numeric Data Types") subgraph Lab Skills mongodb/insert_document -.-> lab-421807{{"MongoDB の結果をソートして制限する"}} mongodb/find_documents -.-> lab-421807{{"MongoDB の結果をソートして制限する"}} mongodb/query_with_conditions -.-> lab-421807{{"MongoDB の結果をソートして制限する"}} mongodb/sort_documents -.-> lab-421807{{"MongoDB の結果をソートして制限する"}} mongodb/use_numeric_data_types -.-> lab-421807{{"MongoDB の結果をソートして制限する"}} end

単一のフィールドでソートする

このステップでは、MongoDB で単一のフィールドを使用してドキュメントをソートする方法を学びます。ソートは、クエリ結果を特定の順序で整理する強力な技術であり、データ分析と取得に不可欠です。

まず、ターミナルで MongoDB シェルを起動しましょう。

mongosh

次に、ソートを示すためのサンプルの本のコレクションを作成しましょう。

use bookstore

db.books.insertMany([
    { title: "Python Basics", pages: 250, price: 29.99 },
    { title: "JavaScript Advanced", pages: 400, price: 39.99 },
    { title: "MongoDB Fundamentals", pages: 300, price: 34.99 },
    { title: "Data Science", pages: 350, price: 44.99 }
])

この例では、4 つのドキュメントを持つ books というコレクションを作成しました。各本にはタイトル、ページ数、価格があります。

単一のフィールドでドキュメントを昇順でソートするには、.sort() を使用した find() メソッドを使います。

db.books.find().sort({ pages: 1 });

このコマンドは、ページ数で昇順に本をソートします。1 は昇順を示し、つまり本は最も少ないページ数から最も多いページ数までソートされます。

価格で降順にソートしてみましょう。

db.books.find().sort({ price: -1 });

-1 は降順を示します。これにより、最も高価な本が最初に表示されます。最高価格から最安価格までソートされた本が表示されるはずです。

複数のソートキーを使用する

このステップでは、MongoDB で複数のキーを使用してドキュメントをソートする方法を学びます。この高度なソート技術を使うことで、データベースのクエリに対してより複雑で精密なソート条件を作成できます。

前のステップで作成した bookstore データベースを引き続き使用しましょう。

use bookstore

時には、1つ以上のフィールドでドキュメントをソートしたい場合があります。たとえば、本をまず価格で、その後各価格グループ内でページ数でソートしたいとします。

複数のソートキーを使用する方法は次のとおりです。

db.books.find().sort({ price: 1, pages: -1 });

この例では、ソートは次のように機能します。

  • まず、価格で昇順(最安価格から最高価格)にドキュメントをソートします。
  • 各価格グループ内で、その後ページ数で降順(最も多いページ数から最も少ないページ数)にソートします。

もっと明確にするためにいくつかの本を追加しましょう。

db.books.insertMany([
  { title: "Machine Learning", pages: 400, price: 39.99 },
  { title: "Web Development", pages: 300, price: 39.99 },
  { title: "Artificial Intelligence", pages: 450, price: 44.99 }
]);

では、複数キーのソートを実行しましょう。

db.books.find().sort({ price: 1, pages: -1 });

このコマンドを実行すると、同じ価格の本がページ数で降順にソートされていることに気付くでしょう。

また、異なるフィールドに対して異なる方向でソートすることもできます。たとえば:

db.books.find().sort({ price: 1, title: 1 });

これはまず価格で昇順にソートし、その後同じ価格の本をタイトルでアルファベット順にソートします。

結果の数を制限する

このステップでは、MongoDB のクエリで返されるドキュメントの数を制限する方法を学びます。これは、大規模なデータセットを管理し、最も関連性の高い情報のみを取得するための強力な技術です。

bookstore データベースを引き続き使用しましょう。

use bookstore

MongoDB は、クエリで返されるドキュメントの数を制限するための .limit() メソッドを提供しています。これは、以下の場合に特に役立ちます。

  • 上位 N 件の結果のみを表示する
  • ページネーションを実装する
  • 転送するデータ量を削減する

結果の制限を示しましょう。

// 最初の 3 冊の本のみを取得する
db.books.find().limit(3);

このコマンドは、データベースに存在する本の数に関係なく、コレクションから最初の 3 つのドキュメントのみを返します。

.limit() とソートを組み合わせることで、さらに特定の結果を得ることができます。

// 最も高価な 3 冊の本を取得する
db.books.find().sort({ price: -1 }).limit(3);

このクエリはまず本を価格で降順にソートし、その後最も高価な 3 冊の本のみを返します。

複数の技術を組み合わせた別の例を試してみましょう。

// 最もページの多い 2 冊の本を取得する
db.books.find().sort({ pages: -1 }).limit(2);

これは、最もページの多い順にソートされた、ページ数が最も多い 2 冊の本を返します。

ドキュメントをスキップする

このステップでは、MongoDB で .skip() メソッドを使用して、クエリで指定された数のドキュメントをスキップする方法を学びます。この技術は、ページネーションの実装や特定のデータサブセットの取得に不可欠です。

bookstore データベースを引き続き使用しましょう。

use bookstore

.skip() メソッドを使用すると、結果を返し始める前に特定の数のドキュメントをバイパスできます。これは、以下の場合に特に役立ちます。

  • ページネーションを実装する
  • 最初のいくつかの結果をスキップする
  • オフセットベースのクエリを作成する

ドキュメントをスキップする方法を示しましょう。

// 最初の 2 冊の本をスキップする
db.books.find().skip(2);

このコマンドは、最初の 2 つのドキュメントをスキップし、コレクションの残りのドキュメントを返します。

.skip().limit() を組み合わせることで、強力なページネーションのようなクエリを作成できます。

// 最初の 2 冊の本をスキップし、次の 3 冊を返す
db.books.find().skip(2).limit(3);

このクエリは、以下のことを行います。

  1. 最初の 2 冊の本をスキップする
  2. 次の 3 冊の本を返す

ソート、スキップ、制限を組み合わせて、より複雑な例を作成しましょう。

// 本を価格でソートし、最も高価な 2 冊をスキップし、次の 2 冊を返す
db.books.find().sort({ price: -1 }).skip(2).limit(2);

このクエリは、以下のことを行います。

  1. 本を価格で降順にソートする
  2. 最も高価な 2 冊の本をスキップする
  3. ソート済みのリストの次の 2 冊の本を返す

結果の数をカウントする

このステップでは、MongoDB で異なる方法を使ってドキュメントの数をカウントする方法を学びます。カウントは、データセットのサイズを把握し、結果をフィルタリングするための重要な操作です。

bookstore データベースを引き続き使用しましょう。

use bookstore

MongoDB はドキュメントの数をカウントするための複数の方法を提供しています。主な 3 つの方法を見ていきましょう。

  1. 基本的なドキュメントのカウント:
// 本の総数をカウントする
db.books.countDocuments();

このメソッドは books コレクション内のドキュメントの総数を返します。このコマンドを実行すると、データベース内の本の総数が表示されます。

  1. フィルタを使ったカウント:
// 40 ドル以上の価格の本をカウントする
db.books.countDocuments({ price: { $gt: 40 } });

ここで $gt は「より大きい」を意味します。このクエリは 40 ドル以上の価格の本の数をカウントします。特定の条件に一致するドキュメントの数を取得することができます。

  1. 複数の条件を使ったフィルタリング:
// 350 ページ以上で 40 ドル以上の価格の本をカウントする
db.books.countDocuments({
  pages: { $gt: 350 },
  price: { $gt: 40 }
});

このより複雑なクエリは、特定の要件を満たすドキュメントの数をカウントするために複数の条件をどのように組み合わせるかを示しています。

もっと複雑なカウントを示すためにいくつかの本を追加しましょう。

db.books.insertMany([
  { title: "Advanced Algorithms", pages: 500, price: 49.99 },
  { title: "Cloud Computing", pages: 400, price: 45.99 },
  { title: "Network Security", pages: 350, price: 39.99 }
]);

では、もう少し高度なカウントのシナリオを試してみましょう。

// 300 ページ以上 450 ページ以下の本をカウントする
db.books.countDocuments({
  pages: {
    $gte: 300,
    $lte: 450
  }
});

このクエリは、特定のページ数の範囲内の本の数をカウントするために $gte(以上)と $lte(以下)を使っています。数値の範囲に基づいてドキュメントをフィルタリングしてカウントする強力な方法です。

まとめ

この実験では、MongoDB の結果を単一のフィールドで昇順と降順の両方を使ってソートする方法を学びました。また、複数のソートキーの使用方法を調べ、複数のフィールドでソートすることでより複雑なソート条件を作成できることを学びました。さらに、返される結果の数を制限し、特定の数のドキュメントをスキップする方法を学び、これはページネーションやデータ分析に役立ちます。最後に、クエリに一致するドキュメントの総数をカウントする方法を学び、これはデータのサイズと範囲を理解するための重要な機能です。