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

MongoDBでフィールドのデータ型を変更する方法をわかりやすく解説

MongoDBの集計フレームワーク(Aggregation)では、フィールドの型を直接変更することができません。そのため、既存フィールドの型を変換したい場合は、シェル上でコードを記述して処理を行う必要があります。

本記事では、最もよくあるケースである「文字列型(string)から数値型(int)への変換」を例に、具体的な手順を順番に解説していきます。

1. コレクションとドキュメントを作成する

まずは練習用として、コレクションにドキュメントを挿入します。次のクエリを実行してください。

> db.changeDataType.insertOne({"StudentName":"Larry","StudentAge":23,"StudentZipCode":"10001","isProgrammer":false});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ed4976fd07954a4890694")
}

2. find()メソッドでドキュメントを表示する

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

> db.changeDataType.find().pretty();

実行結果は以下の通りです。

{
    "_id" : ObjectId("5c6ed4976fd07954a4890694"),
    "StudentName" : "Larry",
    "StudentAge" : 23,
    "StudentZipCode" : "10001",
    "isProgrammer" : false
}

3. 各フィールドの型を確認する

続いて、コレクション内の各フィールドが現在どの型を持っているかを確認しましょう。まずfindOne()でドキュメントを取得し、変数に格納します。

> checkType=db.changeDataType.findOne();
{
    "_id" : ObjectId("5c6ed4976fd07954a4890694"),
    "StudentName" : "Larry",
    "StudentAge" : 23,
    "StudentZipCode" : "10001",
    "isProgrammer" : false
}

この変数「checkType」に対してtypeof演算子を使用すれば、各フィールドの型を調べられます。

> typeof checkType._id;
object
> typeof checkType.StudentName;
string
> typeof checkType.StudentAge;
number
> typeof checkType.StudentZipCode;
string
> typeof checkType.isProgrammer;
boolean

この時点では「StudentZipCode」が文字列型(string)であることが確認できます。

4. 文字列型から数値型へ変換する

それでは、「StudentZipCode」フィールドの型を文字列型から数値型へ変更してみましょう。forEach()で全ドキュメントを走査しながら、parseInt()で値を数値に変換し、$set演算子で更新します。

> db.changeDataType.find().forEach(function(ch)
... {
... db.changeDataType.update({
... "_id":ch._id},
... {"$set":
... {
... "StudentZipCode":parseInt(ch.StudentZipCode)
... }
... });
... });

補足: MongoDBの新しいバージョンではupdate()は非推奨となっているため、実運用ではupdateOne()やupdateMany()を使用することをおすすめします。

5. 変換結果を検証する

型の変換が完了したら、先ほどと同じ手順でもう一度ドキュメントを取得して確認します。

> againCheckType=db.changeDataType.findOne();
{
    "_id" : ObjectId("5c6ed4976fd07954a4890694"),
    "StudentName" : "Larry",
    "StudentAge" : 23,
    "StudentZipCode" : 10001,
    "isProgrammer" : false
}

この変数を使って、対象フィールドの型をチェックしてみましょう。

> typeof againCheckType.StudentZipCode;
number

出力結果を見ると、「StudentZipCode」フィールドが文字列型から数値型(number)に正しく変換されていることが分かります。このように、MongoDBでフィールドの型を変更する場合は、find()で取得したドキュメントをループ処理し、$setと組み合わせて更新するのが基本的なアプローチです。

  1. Microsoft Accessでフィールドサイズを変更する方法【数値型・テキスト型】

    Microsoft Accessでは、テーブルの各レコードが使用する容量を、数値型フィールドやテキスト型フィールドの「フィールドサイズ」プロパティを変更することで調整できます。ほとんどのフィールドサイズの変更は、データシートビューとデザインビューのどちらでも行えますが、小数点以下の値を持つ数値フィールド(単精度浮動小数点型、倍精度浮動小数点型、十進型など)については、デザインビューでのみ変更が可能です。 フィールドサイズを変更するとどうなる? Accessでは、空のフィールドでも、すでにデータが入力されているフィールドでも、フィールドサイズを変更できます。 フィールドにデータが含まれていな

  2. 【初心者向け】PCでNATタイプを変更する4つの方法|Windows 10対応

    21世紀の現在、高速なインターネット接続は生活に欠かせないインフラとなっています。多くの人々が通信プランや機器のアップグレードに多額の費用をかけていますが、それでもネット速度が遅い原因が分からず悩んでいる方は少なくありません。もし接続速度を改善できずにお困りなら、PCのNATタイプを変更することを検討してみましょう。 PCでNATタイプを変更する方法 NATとは? 誰もが日常的にインターネットを利用していますが、その接続を支えるバックグラウンドの仕組みまで理解している人は多くありません。その一つがNAT(Network Address Translation:ネットワークアドレス変換)です。