MongoDBで最小値を取得する方法:sort()とlimit()を使った実践ガイド
MongoDBで最小値を見つける基本手法
MongoDBでコレクション内の最小値を取得したい場合、sort()メソッドとlimit(1)を組み合わせるのが最もシンプルで効率的な方法です。対象のフィールドを昇順(1)にソートし、先頭の1件だけを取得することで、最小値を持つドキュメントを取り出せます。
基本的な構文は以下のとおりです。
db.yourCollectionName.find().sort({yourFieldName: 1}).limit(1);サンプルコレクションの作成
それでは、実際に動作を確認するために、ドキュメントを含むコレクションを作成してみましょう。以下のクエリを実行します。
> db.findMinValueDemo.insertOne({"StudentMarks":78});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f80ea2f684a30fbdfd59f")
}
> db.findMinValueDemo.insertOne({"StudentMarks":69});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f80f02f684a30fbdfd5a0")
}
> db.findMinValueDemo.insertOne({"StudentMarks":79});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f80f32f684a30fbdfd5a1")
}
> db.findMinValueDemo.insertOne({"StudentMarks":59});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f80f82f684a30fbdfd5a2")
}
> db.findMinValueDemo.insertOne({"StudentMarks":91});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f80fb2f684a30fbdfd5a3")
}この例では、学生の点数(StudentMarks)を格納する「findMinValueDemo」というコレクションに、5件のドキュメントを挿入しました。
登録したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.findMinValueDemo.find().pretty();
実行結果は以下のとおりです。
{ "_id" : ObjectId("5c8f80ea2f684a30fbdfd59f"), "StudentMarks" : 78 }
{ "_id" : ObjectId("5c8f80f02f684a30fbdfd5a0"), "StudentMarks" : 69 }
{ "_id" : ObjectId("5c8f80f32f684a30fbdfd5a1"), "StudentMarks" : 79 }
{ "_id" : ObjectId("5c8f80f82f684a30fbdfd5a2"), "StudentMarks" : 59 }
{ "_id" : ObjectId("5c8f80fb2f684a30fbdfd5a3"), "StudentMarks" : 91 }最小値を取得するクエリの実行
ここからが本題です。MongoDBで最小値を取得するには、次のようなクエリを実行します。
> db.findMinValueDemo.find().sort({StudentMarks: 1}).limit(1);実行結果は以下のとおりです。
{ "_id" : ObjectId("5c8f80f82f684a30fbdfd5a2"), "StudentMarks" : 59 }ご覧のとおり、StudentMarksフィールドの最小値である59を持つドキュメントが正しく取得できました。
仕組みの解説
このクエリの動作を分解すると、以下のようになります。
1. sort({StudentMarks: 1}) — StudentMarksフィールドを昇順(小さい値から大きい値へ)に並べ替えます。
2. limit(1) — ソート結果のうち、最初の1件のみを返します。これにより最小値のドキュメントだけが取得されます。
補足:最大値を取得したい場合
逆に最大値を取得したい場合は、ソートの順序を降順(-1)に変更するだけで対応できます。
db.yourCollectionName.find().sort({yourFieldName: -1}).limit(1);また、集計パイプライン(aggregation)の$min演算子や$groupステージを使えば、より複雑な条件での最小値計算も可能です。単純な最小値取得であれば、今回紹介したsort() + limit(1)の組み合わせが、インデックスを活用でき高速かつ直感的なのでおすすめです。
-
MongoDBのサブドキュメントを検索する方法:ドット表記を使ったクエリ実行手順を解説
MongoDBでは、ネストされたサブドキュメント(埋め込みドキュメント)を検索する際に、ドット表記(dot notation)を使用します。フィールド名とサブフィールド名をドット(.)でつなぐことで、階層構造を持つデータにも簡単にアクセスできます。この記事では、実際にコレクションを作成し、サブドキュメントに対してクエリを実行するまでの手順をサンプルコード付きで解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、サブドキュメントを含むドキュメントをコレクションに挿入します。> db.demo537.insertOne({details:{S
-
MongoDBでNumberLong値を出力する方法を解説
MongoDBのNumberLong値を出力する基本方法mongoシェルでは、64ビット整数を扱うためにNumberLong()ラッパーが用意されています。通常のJavaScriptの数値型では正確に表現できない大きな整数値も、NumberLongを使えば安全に保存・操作できます。ここでは、カスタム変数にNumberLong値を格納し、toString()メソッドを使って出力する方法を紹介します。基本構文var anyVariableName = NumberLong(yourLongNumber); yourVariableName.toString();実装例1それでは、実際に上記の構文を