MongoDBコレクションから最大値のドキュメントを取得する方法
MongoDBコレクションから最大値のドキュメントを取得する方法
MongoDBのコレクションから特定フィールドが最大のドキュメントを取得したい場合は、sort()メソッドで降順に並べ替え、limit(1)を組み合わせるのが基本かつ効率的な方法です。
この記事では、実際にコレクションを作成しながら、最大値を取得するクエリの書き方を具体的な実行例とともに解説します。
1. サンプルコレクションの作成
まず、テスト用のコレクションにドキュメントを挿入してみましょう。
> db.demo669.insertOne({"Marks":76});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3133c04263e90dac943d9")
}
> db.demo669.insertOne({"Marks":55});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3133f04263e90dac943da")
}
> db.demo669.insertOne({"Marks":89});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3134204263e90dac943db")
}
> db.demo669.insertOne({"Marks":88});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3134504263e90dac943dc")
}
> db.demo669.insertOne({"Marks":79});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3134e04263e90dac943dd")
}
2. 登録されたドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo669.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ea3133c04263e90dac943d9"), "Marks" : 76 }
{ "_id" : ObjectId("5ea3133f04263e90dac943da"), "Marks" : 55 }
{ "_id" : ObjectId("5ea3134204263e90dac943db"), "Marks" : 89 }
{ "_id" : ObjectId("5ea3134504263e90dac943dc"), "Marks" : 88 }
{ "_id" : ObjectId("5ea3134e04263e90dac943dd"), "Marks" : 79 }
3. 最大値を取得するクエリ
コレクションから「Marks」フィールドが最大のドキュメントを取得するには、以下のようにクエリを記述します。
> db.demo669.find().sort({"Marks":-1}).limit(1);
実行結果は次のとおりです。
{ "_id" : ObjectId("5ea3134204263e90dac943db"), "Marks" : 89 }
クエリの仕組み
このクエリが動作する仕組みはシンプルです。
sort({"Marks": -1}): 「Marks」フィールドを降順(大きい順)に並べ替えます。limit(1): ソート後の先頭1件だけを取得します。
この2つを組み合わせることで、コレクション全体をスキャンすることなく、最大値を持つドキュメントだけを効率的に取り出せます。
補足:最小値を取得したい場合
逆に最小値を取得したい場合は、ソートの方向を昇順(1)に変更するだけで対応できます。
> db.demo669.find().sort({"Marks":1}).limit(1);
このように、sort()とlimit()の組み合わせは、MongoDBで最大値・最小値を取得する際の最も基本的なパターンです。大量のデータを扱う場合でも、対象フィールドにインデックスを作成しておけば、高速に結果を得ることができます。
-
MongoDBコレクションの全キー(フィールド名)を取得する方法まとめ
この記事は2019年1月18日にObjectRocket.com/blogで公開された内容をもとにしています。 MongoDB®のコレクションに含まれるすべてのキーを把握することは、スキーマの検証、フィールド名のタイプミスのデバッグ、設定すべきでないフィールドの発見など、さまざまな場面で役立ちます。本記事では、MongoDBコレクション内の全キー名を取得する複数の方法を、状況別にわかりやすく解説します。 まず検討したい:ODMやマネージドサービスの活用 ObjectRocketをはじめとする多くのMongoDB-as-a-Service事業者は、ユーザーインターフェース(UI)上で簡単にキーを
-
MongoDBコレクション内の全キー名を取得する方法|MapReduce・Aggregation・シェルなど状況別に解説
スキーマの検証、フィールド名のタイプミスのデバッグ、設定されるべきではないフィールドの発見などを行うには、まずMongoDBコレクション内にどのようなキーが存在するのかを把握しておく必要があります。多くのMongoDB-as-a-Service事業者は、UI上で手軽にこれを実現できる機能を提供しています(ObjectRocketもそのひとつです)。また、経験豊富なMongoDBユーザーの多くは、JavaScript向けのMongooseやPython向けのMongoengineといったオブジェクトドキュメントマッパー(ODM)を導入しています。ODMを使えば、アプリケーション向けの一貫性のある