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

カンマを含む文字列をdouble型に変換するMongoDBクエリの書き方

カンマ区切りの文字列をdoubleに変換する方法

カンマ区切りの数値文字列(例:"45,67,78.0")をdouble型の数値に変換するには、aggregate()メソッドと$convert演算子を組み合わせて使用します。ここでは、実際のコード例とともにその手順を詳しく解説します。

サンプルコレクションの作成

まず、変換対象となるドキュメントを格納したコレクションを作成しましょう。

> db.demo335.insertOne({"Value":"45,67,78.0"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e522a1cf8647eb59e562091")
}
> db.demo335.insertOne({"Value":"17664,76,534.0"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e522a26f8647eb59e562092")
}
> db.demo335.insertOne({"Value":"8899,322,135,875.50"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e522a34f8647eb59e562093")
}
> db.demo335.insertOne({"Value":"1,533.07"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e522ab9f8647eb59e562094")
}

登録済みドキュメントの確認

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

> db.demo335.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e522a1cf8647eb59e562091"), "Value" : "45,67,78.0" }
{ "_id" : ObjectId("5e522a26f8647eb59e562092"), "Value" : "17664,76,534.0" }
{ "_id" : ObjectId("5e522a34f8647eb59e562093"), "Value" : "8899,322,135,875.50" }
{ "_id" : ObjectId("5e522ab9f8647eb59e562094"), "Value" : "1,533.07" }

カンマを含む文字列をdoubleに変換するクエリ

以下は、$splitで文字列をカンマで分割し、$reduce$concatで連結してカンマを除去した後、$convertでdouble型へ変換する集計クエリの例です。

db.demo335.aggregate([
...    { $project: {
...       data: {
...          $convert: {
...             input: {
...                $reduce: {
...                   input: {
...                      $split: ['$Value', ',']
...                   },
...                   initialValue: '',
...                   in: {
...                      $concat: ['$$value', '$$this']
...                   }
...                }
...             },
...             to: 'double',
...             onError: 0
...          }
...       }
...    }}
... ])

実行結果

上記のクエリを実行すると、「Value」フィールドからカンマが取り除かれ、double型の数値として「data」フィールドに出力されます。

{ "_id" : ObjectId("5e522a1cf8647eb59e562091"), "data" : 456778 }
{ "_id" : ObjectId("5e522a26f8647eb59e562092"), "data" : 1766476534 }
{ "_id" : ObjectId("5e522a34f8647eb59e562093"), "data" : 8899322135875.5 }
{ "_id" : ObjectId("5e522ab9f8647eb59e562094"), "data" : 1533.07 }

クエリの仕組み

  • $split:「Value」フィールドの文字列をカンマ(,)で分割し、配列に変換します。
  • $reduce$concat:分割された配列の要素を先頭から順に連結し、カンマを含まない一つの文字列を再構築します。
  • $convert:再構築した文字列をdouble型に変換します。「onError: 0」を指定しているため、変換に失敗した場合は0が返されます。

このように、aggregate()パイプライン内で複数の演算子を組み合わせることで、文字列形式の数値データを柔軟に数値型へ変換できます。文字列として保存された数値に対して集計やソートを行いたい場合に非常に便利なテクニックなので、ぜひ活用してください。

  1. MongoDBで大文字と小文字を区別せずに検索する方法($regexの使い方)

    MongoDBで大文字と小文字を区別しない(ケースインセンシティブな)検索を実行したい場合は、find()メソッドの中で正規表現($regex)を使用します。基本となる構文は以下の通りです。db.demo572.find({yourFieldName : { $regex : /^yourValue$/i}});正規表現のポイントこの構文で重要なのは、パターンの末尾に付ける「i」オプションです。このフラグを指定することで、マッチング時に大文字と小文字の違いが無視されます。また、^(先頭)と$(末尾)で値を囲むことで、部分一致ではなく完全一致の検索になります。それでは、実際にサンプルコレクション

  2. Javaで文字列をdouble型に変換する方法【parseDoubleの使い方】

    Javaで文字列をdouble型に変換するには、DoubleクラスのparseDouble()メソッドを使用します。このメソッドは、数値形式の文字列を引数として受け取り、対応するdouble型の値を返します。 例えば、次のような文字列があったとします。 String str = "55.2"; この文字列をdouble型に変換するには、以下のようにparseDouble()を呼び出します。 double res = Double.parseDouble(str); サンプルプログラム 以下は、Javaで文字列をDoubleに変換する完全なプログラム例です。 public