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

MongoDBで文字列を日付に変換する方法|$dateFromString演算子の使い方

MongoDBで文字列を日付に変換する方法

MongoDBでは、文字列として保存されている日付データをDate型(ISODate)に変換できます。その際に使用するのが、集計フレームワーク(Aggregation Pipeline)の$dateFromString演算子です。文字列のままでは日付による検索やソート、範囲指定が正しく行えませんが、Date型に変換することで日付関連の操作を柔軟に実行できるようになります。

基本構文

文字列を日付に変換するには、以下の構文を使用します。

db.yourCollectionName.aggregate(
    [
        {
            $project:
            {
                anyVariableName:
                {
                    $dateFromString:
                    {
                        dateString: '$yourFieldName'
                    }
                }
            }
        }
    ]
);

$projectステージで新しいフィールド(anyVariableName)を作成し、$dateFromStringのdateStringに変換元のフィールド名を指定するのが基本の流れです。

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

それでは、実際の動作を確認するために、サンプルデータを含むコレクションを作成しましょう。以下のクエリで「ConvertStringToDateDemo」コレクションにドキュメントを挿入します。

> db.ConvertStringToDateDemo.insertOne({"ArrivalDate":"20-10-2019"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ef3596fd07954a489069f")
}
> db.ConvertStringToDateDemo.insertOne({"ArrivalDate":"21-02-2019"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ef3616fd07954a48906a0")
}
> db.ConvertStringToDateDemo.insertOne({"ArrivalDate":"10-12-2018"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ef36d6fd07954a48906a1")
}
> db.ConvertStringToDateDemo.insertOne({"ArrivalDate":"31-01-2017"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ef37b6fd07954a48906a2")
}

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

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

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

出力結果は以下の通りです。

{
    "_id" : ObjectId("5c6ef3596fd07954a489069f"),
    "ArrivalDate" : "20-10-2019"
}
{
    "_id" : ObjectId("5c6ef3616fd07954a48906a0"),
    "ArrivalDate" : "21-02-2019"
}
{
    "_id" : ObjectId("5c6ef36d6fd07954a48906a1"),
    "ArrivalDate" : "10-12-2018"
}
{
    "_id" : ObjectId("5c6ef37b6fd07954a48906a2"),
    "ArrivalDate" : "31-01-2017"
}

この時点では、「ArrivalDate」フィールドの値がすべて文字列型で保存されていることがわかります。

文字列を日付型に変換するクエリ

それでは、$dateFromStringを使って文字列を日付型に変換してみましょう。

> db.ConvertStringToDateDemo.aggregate( [ {
...     $project: {
...         StringToDate: {
...             $dateFromString: {
...                 dateString: '$ArrivalDate'
...             }
...         }
...     }
... } ] ).pretty();

出力結果は以下の通りです。

{
    "_id" : ObjectId("5c6ef3596fd07954a489069f"),
    "StringToDate" : ISODate("2019-10-20T00:00:00Z")
}
{
    "_id" : ObjectId("5c6ef3616fd07954a48906a0"),
    "StringToDate" : ISODate("2019-02-21T00:00:00Z")
}
{
    "_id" : ObjectId("5c6ef36d6fd07954a48906a1"),
    "StringToDate" : ISODate("2018-12-10T00:00:00Z")
}
{
    "_id" : ObjectId("5c6ef37b6fd07954a48906a2"),
    "StringToDate" : ISODate("2017-01-31T00:00:00Z")
}

すべてのドキュメントで「StringToDate」フィールドがISODate型(例:ISODate("2019-10-20T00:00:00Z"))に変換されていることが確認できます。これにより、日付による検索、ソート、範囲指定クエリなどが正しく実行できるようになります。

補足:$dateFromStringの主なオプション

$dateFromStringには、変換処理をより柔軟に制御するためのオプションが用意されています。

  • format:入力文字列の日付形式を明示的に指定します(例:"%d-%m-%Y")。
  • timezone:日付を解釈する際のタイムゾーンを指定します。
  • onError:変換に失敗した場合に返す値を指定します。
  • onNull:入力がnull、またはフィールドが存在しない場合に返す値を指定します。

特にformatオプションを指定すると、"20-10-2019"のような形式の日付文字列を意図どおりに解釈でき、変換エラーの発生を防ぐことができます。用途に応じてこれらのオプションを活用しましょう。

  1. MongoDBで日付形式を変更する方法

    ```html MongoDBシェルでは、文字列として扱われている日付の形式を自由に変換できます。本記事では、split()メソッドとカスタム変数を使って、日付フォーマットを変換する手順を具体例とともに解説します。 変換前の日付データ 今回は、次のような「日-月-年(DD-MM-YYYY)」形式の日付を例にします。 01-10-2019 日付形式を変換する手順 この日付を「年-月-日(YYYY-MM-DD)」形式に変更します。まず、日付文字列をカスタム変数に格納し、split()メソッドで分割してから、文字列として組み立て直します。 区切り文字には正規表現 /-|\// を使用しているため

  2. MySQLで文字列を日付に変換する方法|STR_TO_DATE関数の使い方を解説

    MySQLで文字列を日付に変換するにはMySQLで文字列を日付(DATE型)に変換するには、STR_TO_DATE()関数を使用します。この関数は、指定した書式に従って文字列を解析し、日付値として返してくれます。STR_TO_DATE()の基本構文SELECT STR_TO_DATE(文字列, %d,%m,%Y) AS 任意の変数名;第1引数に変換したい文字列を、第2引数にその文字列の並び順を示すフォーマット指定子を渡します。主なフォーマット指定子は以下のとおりです。%d … 日(01〜31)%m … 月(01〜12)%Y … 4桁の年%M … 月の英語名(November、December