Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

MongoDB - Sửa lỗi "Failed to convert from type String to type Date"

Để khắc phục lỗi chuyển đổi chuỗi sang Date, sử dụng $dateFromString trong pipeline aggregate(). Toán tử này chuyển chuỗi ngày/giờ thành đối tượng Date.

Tạo collection với ngày dạng chuỗi

> db.demo619.insertOne({"DueDate":"10-10-2020"});
> db.demo619.insertOne({"DueDate":"12-01-2019"});
> db.demo619.insertOne({"DueDate":"28-10-2010"});

Hiển thị dữ liệu gốc

> db.demo619.find();

Kết quả (dạng String):

{
  "_id" : ObjectId("5e99d7846c954c74be91e69e"), "DueDate" : "10-10-2020"
}
{
  "_id" : ObjectId("5e99d7996c954c74be91e69f"), "DueDate" : "12-01-2019"
}
{
  "_id" : ObjectId("5e99d7ab6c954c74be91e6a0"), "DueDate" : "28-10-2010"
}

Chuyển đổi sang Date với $dateFromString

> db.demo619.aggregate([
  {
    $project: {
      DueDate: {
        $dateFromString: {
          dateString: '$DueDate',
          timezone: 'America/New_York'
        }
      }
    }
  }
])

Kết quả (đã chuyển thành ISODate):

{
  "_id" : ObjectId("5e99d7846c954c74be91e69e"),
  "DueDate" : ISODate("2020-10-10T04:00:00Z")
}
{
  "_id" : ObjectId("5e99d7996c954c74be91e69f"),
  "DueDate" : ISODate("2019-01-12T05:00:00Z")
}
{
  "_id" : ObjectId("5e99d7ab6c954c74be91e6a0"),
  "DueDate" : ISODate("2010-10-28T04:00:00Z")
}

Lưu ý:

  • Định dạng chuỗi DD-MM-YYYY được parse tự động
  • Tham số timezone điều chỉnh múi giờ (ví dụ New York là UTC-4/-5)
  • Có thể thêm format nếu chuỗi có định dạng đặc biệt: "%d-%m-%Y"
  • Kết quả trả về kiểu ISODate có thể dùng cho so sánh, sắp xếp, index