Để 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
formatnếu chuỗi có định dạng đặc biệt:"%d-%m-%Y" - Kết quả trả về kiểu
ISODatecó thể dùng cho so sánh, sắp xếp, index