MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでカスタムフィールドによるインデックス作成とページネーション付きソートを実現する方法

MongoDBでは、複数のフィールドに複合インデックスを作成することで、ソートやページネーション(limit / skip)を効率的に実行できます。本記事では、実際のコマンド例を通じて、コレクションへのインデックス作成からドキュメントの挿入、並べ替えとページングまでの一連の手順を解説します。

1. 複合インデックスの作成

まず、Name フィールドと CountryName フィールドに対して複合インデックスを作成します。インデックスは昇順(1)で設定しています。

> db.demo373.createIndex({"Name":1,"CountryName":1});
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

この時点でコレクションが自動的に作成され、インデックスが1つ追加されたことが確認できます。

2. ドキュメントの挿入

次に、insertOne() メソッドを使ってサンプルドキュメントを5件挿入します。

> db.demo373.insertOne({"Name":"Chris","Age":22,"CountryName":"US"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e59ffde2ae06a1609a00aff")
}
> db.demo373.insertOne({"Name":"David","Age":21,"CountryName":"AUS"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e59ffe82ae06a1609a00b00")
}
> db.demo373.insertOne({"Name":"Bob","Age":23,"CountryName":"UK"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e59fff42ae06a1609a00b01")
}
> db.demo373.insertOne({"Name":"John","Age":21,"CountryName":"US"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e59ffff2ae06a1609a00b02")
}
> db.demo373.insertOne({"Name":"Carol","Age":23,"CountryName":"AUS"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e5a00082ae06a1609a00b03")
}

3. 全ドキュメントの表示

find() メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。

> db.demo373.find();

上記クエリの出力結果は以下の通りです。

{ "_id" : ObjectId("5e59ffde2ae06a1609a00aff"), "Name" : "Chris", "Age" : 22, "CountryName" : "US" }
{ "_id" : ObjectId("5e59ffe82ae06a1609a00b00"), "Name" : "David", "Age" : 21, "CountryName" : "AUS" }
{ "_id" : ObjectId("5e59fff42ae06a1609a00b01"), "Name" : "Bob", "Age" : 23, "CountryName" : "UK" }
{ "_id" : ObjectId("5e59ffff2ae06a1609a00b02"), "Name" : "John", "Age" : 21, "CountryName" : "US" }
{ "_id" : ObjectId("5e5a00082ae06a1609a00b03"), "Name" : "Carol", "Age" : 23, "CountryName" : "AUS" }

4. ソートとページネーションの実行

MongoDBでインデックスを活用しながらソートとページネーションを行うには、sort()limit()skip() を組み合わせます。以下の例では、「Name」フィールドで昇順に並べ替え、先頭の2件をスキップして最大4件を取得しています。

> db.demo373.find().sort({"Name":1, "Age":1}).limit(4).skip(2);

出力結果は以下のようになります。

{ "_id" : ObjectId("5e59ffde2ae06a1609a00aff"), "Name" : "Chris", "Age" : 22, "CountryName" : "US" }
{ "_id" : ObjectId("5e59ffe82ae06a1609a00b00"), "Name" : "David", "Age" : 21, "CountryName" : "AUS" }
{ "_id" : ObjectId("5e59ffff2ae06a1609a00b02"), "Name" : "John", "Age" : 21, "CountryName" : "US" }

ポイントまとめ

  • 複合インデックス:ソート対象となるフィールドの組み合わせでインデックスを作成すると、クエリのパフォーマンスが大幅に向上します。
  • skip() と limit():ページネーションには skip() で読み飛ばす件数を指定し、limit() で1ページあたりの取得件数を制御します。
  • 注意点skip() の値が大きくなるとパフォーマンスが低下するため、大規模データでは範囲クエリ(レンジベースのページネーション)も検討しましょう。
  1. 【MySQL】FIELD()関数を使ってフィールド値によるカスタムソートを実現する方法

    MySQLでカスタムソートを行うには?MySQLでフィールド(列)の値に基づいた独自の並び順(カスタムソート)を実現したい場合は、ORDER BY句とFIELD()関数を組み合わせて使用します。FIELD()関数は、指定した値がリスト内のどの位置にあるかを返すため、その結果をもとにソート順を自由に制御できます。ここでは、実際のサンプルを通じて具体的な手順を見ていきましょう。1. サンプルテーブルを作成するまず、テスト用のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable (StudentId int); Query OK, 0

  2. JavaでMongoDBにインデックスを作成する方法をわかりやすく解説

    MongoDBでインデックスを作成するには、createIndex() メソッドを使用します。この記事では、MongoDBシェルでの基本的な構文と、Javaドライバーを使ったインデックス作成の手順をサンプルコード付きで解説します。 MongoDBシェルでの基本構文 MongoDBシェル(mongosh)でインデックスを作成する場合、以下の構文を使用します。 db.COLLECTION_NAME.createIndex({KEY: 1}) KEY にはインデックスを作成したいフィールド名を指定し、1 は昇順(ascending)を意味します。降順(descending)のインデックスを作成したい