MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Konversikan String ke tanggal atau ISODate menggunakan Mongo Shell di MongoDB

Berikut salah satu cara untuk melakukannya menggunakan "01-JUN-2009 00:00" sebagai nilai tanggal.

Pertama, urai nilai waktu:

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

Kemudian, konversikan string MMM bulan ke numerik MM seperti yang Anda sebutkan di komentar. Anda harus menggunakan versi 3.4 atau lebih tinggi untuk menggunakan pernyataan beralih:

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

Kemudian, Anda dapat membuat string yang akan ditafsirkan MongoDB sebagai tanggal:

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

Langkah terakhir adalah membuat ISODate dengan meneruskan string ke Date():

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pipa agregat MongoDB dengan objek tertaut

  2. Kelompok luwak dan hitung

  3. Bagaimana cara mencocokkan seluruh dokumen?

  4. Dapatkah cakupan rel memfilter jumlah kelas terkait untuk bidang tertentu?

  5. Agregasi Rata-Rata dengan Cap Waktu String