MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Chuyển đổi chuỗi thành ngày tháng hoặc ISODate bằng cách sử dụng Mongo Shell trong MongoDB

Đây là một cách để thực hiện việc này bằng cách sử dụng "01-JUN-2009 00:00" làm giá trị ngày.

Trước tiên, hãy phân tích cú pháp các giá trị thời gian:

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

Sau đó, chuyển đổi chuỗi MMM tháng thành số MM như bạn đã đề cập trong nhận xét. Bạn cần phải ở phiên bản 3.4 trở lên để sử dụng câu lệnh chuyển đổi:

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

Sau đó, bạn có thể tạo chuỗi mà MongoDB sẽ diễn giải là ngày tháng:

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

Bước cuối cùng là tạo ISODate bằng cách chuyển chuỗi vào 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. Groovy không thể tìm thấy hàm tạo phù hợp?

  2. Chọn giá trị cuối cùng của mảng trong tài liệu con

  3. Từ điển <chuỗi, đối tượng> -to-Bson Chuyển đổi tài liệu bỏ qua trường _t

  4. Thủ tục được lưu trữ trong MongoDB

  5. MongoEngine:Thêm trường vào tài liệu động