2017-04-10 6 views
1

MongoDBには何千ものオブジェクトがあります。そして私は "DD-Month(eg.JUN)-YYYY hh:mm"というString形式の "Insert_Date"というフィールドを持っています。私は、私はこの1つを試してみたが、それは「無効ISO日」MongoDBのMongo Shellを使用して文字列を現在の日付に変換するか、ISODateに変換します

db.collection.find().forEach(function(doc) { 
doc.Insert_Date=new ISODate(doc.Insert_Date); 
db.collection.save(doc); 
}) 

それは正規表現を使用している可能性が変換する別の方法がありますが、エラーを示したのmongoシェル を使用して日付やISODateに変換したいですか? すべてのヘルプが妥協されます。

答えて

0

「01-JUN-2009 00: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" } 
]); 

次に、あなたがコメントで言及したようにMMの数値に月MMM文字列に変換します。

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}}); 
}); 

最後のステップ:あなたはMongoDBの日付として解釈する文字列を作成することができ、その後

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" } 
]); 

あなたは、switchステートメントを使用するには、バージョン3.4以上にする必要があります。日付()に文字列を渡すことでISODateを構築することである:私も日を試してみた

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

、それはあなたが特定のexampを提供することができます –

+0

日を台無しにル値ですか?書式を見ると、$ substr()を使ってDate()への引数を構築することができます。 –

+0

これはオブジェクト "Insert_Date"に書かれているものの1つです: "01-JUN-2009 00:00" 'String型MMMからMMへの変換を最初に考えているので、おそらく有効な日付として –

関連する問題