MongoDBに飛び込む - 開発者のための完全ガイド: 数値型 (セクション13/19)
MongoDBは整数(int32)、長整数(int64)、倍精度浮動小数点数(double)、高精度浮動小数点数(decimal128)の4つの主要な数値型をサポートしている。
MongoDB ShellはJavaScriptをベースにしており、デフォルトですべての数値を64ビットの浮動小数点値として扱う。
アプリケーションの要件、値の範囲、必要な精度を考慮して適切な数値型を選択することが重要である。
MongoDBは、さまざまなユースケースと精度要件に対応するために、多様な数値データ型を提供しています。このブログ記事では、MongoDBがサポートする4つの主要な数値型である整数(int32)、長整数(int64)、倍精度浮動小数点数(double)、および高精度浮動小数点数(decimal128)について説明します。また、MongoDB Shellとその基盤となるJavaScriptについても掘り下げ、それらが数値の処理にどのように影響するかを見ていきます。
MongoDB ShellとJavaScript
MongoDB ShellはJavaScriptをベースに構築されており、これがデータ型の処理方法に直接影響しています。デフォルトでは、JavaScriptはすべての数値を64ビットの浮動小数点値として扱います。つまり、MongoDB Shellでは、12と12.0のような数値は等価であり、64ビットのdoubleとして保存されます。
この動作はMongoDB Shellおよび他のJavaScriptベースの環境に固有のものであることに注意してください。他のプログラミング言語とそれぞれのMongoDBドライバーでは、数値の処理に関するデフォルトの動作が異なる場合があります。
整数(int32)
整数、またはMongoDBではint32は、特定の範囲内(約-20億から+20億まで)の全数を格納するために使用されます。この範囲内の数値を扱い、小数点以下の桁を必要としない場合に適しています。
MongoDB Shellでint32の値を明示的に作成するには、`NumberInt()`コンストラクタを使用します:
db.collection.insertOne({ age: NumberInt("25") });
int32を使用すると、数値を64ビットのdoubleとして保存する場合と比較して、ストレージ容量を節約できます。
長整数(int64)
長整数、またはint64は、int32の範囲を超える大きな全数を格納する必要がある場合に使用されます。これにより、はるかに広い範囲の値を提供し、大きな識別番号やタイムスタンプを格納するようなシナリオに適しています。
MongoDB Shellでint64の値を作成するには、`NumberLong()`コンストラクタを使用します:
db.collection.insertOne({ timestamp: NumberLong("1234567890123") });
精度の損失を避けるために、値を文字列として渡すことが重要です。
倍精度浮動小数点数(double)
倍精度浮動小数点数、または64ビットの浮動小数点数は、MongoDBのデフォルトの数値型です。小数点以下の桁を持つ数値を格納できますが、精度に制限があります。doubleは、ある程度の精度の損失が許容される多くの汎用的なシナリオに適しています。
高精度浮動小数点数(decimal128)
金融や科学分野のアプリケーションなど、小数点以下の数値に高い精度が必要な場合、MongoDBはdecimal128型を提供します。最大34桁の十進数の精度を提供し、正確な保存と計算を保証します。
MongoDB Shellでdecimal128の値を作成するには、`NumberDecimal()`コンストラクタを使用します:
db.collection.insertOne({ price: NumberDecimal("9.99") });
Decimal128の値は、近似や精度の損失なく、指定されたとおりに正確に保存されます。
数学演算の実行
MongoDBの数値型に対して数学演算を実行する際は、予期しない結果を避けるために適切な型を使用することが重要です。例えば、`$inc`演算子を使用して値をインクリメントする場合、対応する数値型を使用してください:
db.collection.updateOne({}, { $inc: { age: NumberInt("1") } });
これにより、演算が元の数値型を保持し、目的の精度を維持することが保証されます。
結論
MongoDBのさまざまな数値型を理解することは、数値を効果的に保存および操作するために不可欠です。単純な整数、大きな数値、高精度の小数点数など、どのようなものを扱う場合でも、MongoDBは正確に処理するためのツールを提供します。適切な数値型とコンストラクタを活用することで、MongoDBアプリケーションでのデータの整合性を確保し、正確な計算を実行できます。
アプリケーションの特定の要件、保存する値の範囲、必要な精度のレベルを考慮して、適切な数値型を選択することを忘れないでください。この知識があれば、MongoDBで数値データを効率的かつ正確に処理することができるでしょう。