Format ngày tháng trong MongoDB Aggregation với $dateToString
Toán tử $dateToString chuyển đổi Date/ISODate thành string theo format tùy chỉnh trong aggregation pipeline.
1. Dữ liệu mẫu
> db.demo480.insertOne({ id: 1, "DueDate": new ISODate("2020-01-10") });
> db.demo480.insertOne({ id: 1, "DueDate": new ISODate("2017-12-21") });
> db.demo480.insertOne({ id: 1, "DueDate": new ISODate("2019-10-12") });
> db.demo480.insertOne({ id: 1, "DueDate": new ISODate("2019-12-01") });
2. Pipeline: Lọc id=1, sort giảm dần, format ngày
> db.demo480.aggregate([
{ "$match": { "id": 1 } },
{ "$sort": { "DueDate": -1 } },
{
"$project": {
"_id": 0,
"DueDate": {
"$dateToString": {
"format": "%Y-%m-%d %H-%M",
"date": "$DueDate"
}
}
}
}
]);
3. Kết quả
{ "DueDate": "2020-01-10 00-00" }
{ "DueDate": "2019-12-01 00-00" }
{ "DueDate": "2019-10-12 00-00" }
{ "DueDate": "2017-12-21 00-00" }
Bảng format specifiers
| Specifier | Ý nghĩa | Ví dụ |
|---|---|---|
| %Y | Năm 4 chữ số | 2024 |
| %m | Tháng 01-12 | 03 |
| %d | Ngày 01-31 | 15 |
| %H | Giờ 00-23 (24h) | 14 |
| %M | Phút 00-59 | 30 |
| %S | Giây 00-59 | 45 |
| %L | Mili-giây 000-999 | 123 |
| %j | Ngày trong năm 001-366 | 074 |
| %w | Thứ 0-6 (CN=0) | 5 |
| %U | Tuần trong năm 00-53 | 10 |
| %% | Ký tự % | % |
Format phổ biến
// ISO 8601 date
{ $dateToString: { format: "%Y-%m-%d", date: "$DueDate" } }
// "2024-03-15"
// ISO 8601 datetime
{ $dateToString: { format: "%Y-%m-%dT%H:%M:%S.%LZ", date: "$DueDate" } }
// "2024-03-15T14:30:45.123Z"
// Việt Nam: dd/mm/yyyy
{ $dateToString: { format: "%d/%m/%Y", date: "$DueDate" } }
// "15/03/2024"
// Có timezone (MongoDB 3.6+)
{ $dateToString: { format: "%Y-%m-%d %H:%M", date: "$DueDate", timezone: "+07:00" } }
// "2024-03-15 21:30" (nếu UTC là 14:30)
Lưu ý
$dateToStringchỉ dùng trong aggregation pipeline- Trong find() projection → không dùng được (dùng application format)
- Timezone mặc định là UTC. Chỉ định
timezoneđể chuyển múi giờ