整数と小数が混在するMongoDBフィールドをソートする方法
MongoDBでは、整数値と小数値が混在するフィールドでも、sort()メソッドを使えば数値として正しく並べ替えることができます。この記事では、実際にコレクションを作成し、昇順でソートする手順を具体的なコード例とともに解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使用して、整数と小数が混在するドキュメントを含むコレクションを作成します。
> db.demo755.insertOne({"Value":10});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e72a930c785c834e572")
}
> db.demo755.insertOne({"Value":10.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e75a930c785c834e573")
}
> db.demo755.insertOne({"Value":9.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e79a930c785c834e574")
}
> db.demo755.insertOne({"Value":12.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e7fa930c785c834e575")
}
> db.demo755.insertOne({"Value":11.5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e87a930c785c834e576")
}
> db.demo755.insertOne({"Value":6});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae9e97a930c785c834e577")
}
上記のコードでは、「Value」フィールドに 6 や 10 のような整数と、9.5 や 10.5 のような小数が混在した状態でドキュメントを挿入しています。
登録されたドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo755.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5eae9e72a930c785c834e572"), "Value" : 10 }
{ "_id" : ObjectId("5eae9e75a930c785c834e573"), "Value" : 10.5 }
{ "_id" : ObjectId("5eae9e79a930c785c834e574"), "Value" : 9.5 }
{ "_id" : ObjectId("5eae9e7fa930c785c834e575"), "Value" : 12.5 }
{ "_id" : ObjectId("5eae9e87a930c785c834e576"), "Value" : 11.5 }
{ "_id" : ObjectId("5eae9e97a930c785c834e577"), "Value" : 6 }
挿入した順序のまま表示されていることが確認できます。この時点では、まだ数値順には並んでいません。
sort()を使った昇順ソート
整数と小数が混在する「Value」フィールドをソートするには、次のようにsort()メソッドを使用します。{Value:1}は昇順(小さい値から大きい値へ)を意味します。
> db.demo755.find().sort({Value:1});
実行結果は以下の通りです。
{ "_id" : ObjectId("5eae9e97a930c785c834e577"), "Value" : 6 }
{ "_id" : ObjectId("5eae9e79a930c785c834e574"), "Value" : 9.5 }
{ "_id" : ObjectId("5eae9e72a930c785c834e572"), "Value" : 10 }
{ "_id" : ObjectId("5eae9e75a930c785c834e573"), "Value" : 10.5 }
{ "_id" : ObjectId("5eae9e87a930c785c834e576"), "Value" : 11.5 }
{ "_id" : ObjectId("5eae9e7fa930c785c834e575"), "Value" : 12.5 }
ご覧のとおり、整数と小数が区別されることなく、純粋な数値として正しく昇順に並べ替えられています。
ポイントまとめ
- MongoDBでは整数(int)と小数(double)はどちらもBSONの数値型として扱われるため、混在していても
sort()で問題なく比較・並べ替えできます。 sort({フィールド名: 1})で昇順、-1を指定すると降順になります。- 大量データを扱う場合は、ソート対象のフィールドにインデックスを作成しておくとパフォーマンスが向上します(例:
db.demo755.createIndex({Value:1}))。
-
MongoDB 4でドキュメントをソートし、特定の1つのフィールドだけを表示する方法
MongoDB 4でドキュメントを並べ替えるには、sort()メソッドを使用します。さらに、ソートした特定の1つのフィールドのみを表示したい場合は、プロジェクション(射影)を組み合わせて、表示したいフィールドに「1」を設定します。この記事では、実際のコード例を使って手順を順番に解説していきます。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、テスト用のコレクション「demo611」にドキュメントを登録します。> db.demo611.insertOne({Name:Chris}); { acknowledged : true, insertedI
-
【C言語】整数値と文字値はメモリにどう格納されるのか
これまでのプログラムの中で、整数型や文字型の変数を何度も使ってきました。しかし、その値が実際にメモリ上へどのように格納されているのかを意識したことは少ないかもしれません。この記事では、C言語における整数値・文字値のメモリ上での扱いについて詳しく解説します。 文字値も実は整数として格納される C言語では、文字値も内部的には整数として扱われます。char型は1バイト(8ビット)のサイズしか持たないため、格納できるのは通常 -128〜127 の範囲の値だけです。この範囲を超える値を代入すると、上位のビットが切り捨てられ、予想外の結果になります。 例1:char型に270を代入した場合 以下のコー