sql >> データベース >  >> NoSQL >> MongoDB

MongoDBのMongoShellを使用して、文字列を日付またはISODateに変換します

    日付値として「01-JUN-200900:00」を使用してこれを行う1つの方法があります。

    まず、時間の値を解析します:

    db.dates.aggregate([
       {
        $project : {
            day: { $substr: [ "$Date_Time", 0, 2 ] },
            month: { $substr: [ "$Date_Time", 3, 3 ] },
            year: { $substr: [ "$Date_Time", 7, 4 ] },
            hour: { $substr: [ "$Date_Time", 12, 2 ] },
            minute: { $substr: [ "$Date_Time", 15, 2 ] }
            }
        },
        { $out : "dates" }
    ]);
    

    次に、コメントで述べたように、月のMMM文字列をMM数値に変換します。 switchステートメントを使用するには、バージョン3.4以降である必要があります:

    db.dates.aggregate( [
      {
        $project: {
            "day": "$day",
            "year": "$year",
            "hour": "$hour",
            "minute": "$minute",
            "month" :
            {
                $switch: { 
                    branches: [
                        { case: { $eq: [ "$month", "JAN" ] }, then: "01" },
                        { case: { $eq: [ "$month", "FEB" ] }, then: "02" },
                        { case: { $eq: [ "$month", "MAR" ] }, then: "03" },
                        { case: { $eq: [ "$month", "APR" ] }, then: "04" },
                        { case: { $eq: [ "$month", "MAY" ] }, then: "05" },
                        { case: { $eq: [ "$month", "JUN" ] }, then: "06" },
                        { case: { $eq: [ "$month", "JUL" ] }, then: "07" },
                        { case: { $eq: [ "$month", "AUG" ] }, then: "08" },
                        { case: { $eq: [ "$month", "SEP" ] }, then: "09" },
                        { case: { $eq: [ "$month", "OCT" ] }, then: "10" },
                        { case: { $eq: [ "$month", "NOV" ] }, then: "11" },
                        { case: { $eq: [ "$month", "DEC" ] }, then: "12" }
                    ]
                }
            }
          }
       },
       { $out : "dates" }
    ]);
    

    次に、MongoDBが日付として解釈する文字列を作成できます:

    db.dates.find().forEach(function(doc) { 
        db.dates.update({_id: doc._id},{$set : {"Date_Time": doc.year + '-' + doc.month + '-' + doc.day + 'T' + doc.hour + ':' + doc.minute}});
    });
    

    最後のステップは、文字列をDate()に渡してISODateを作成することです:

    db.dates.find().forEach(function(doc) { 
        doc.Date_Time=new Date(doc.Date_Time);
        db.dates.save(doc); 
    })
    



    1. 手動リファレンスのサポート

    2. Spring Data MongoDB-Mongoコレクションのインデックスをプログラムで作成する場所はどこですか?

    3. Redisと値のクエリ

    4. SQLで短い月の名前を取得する方法