การแปลงวันที่ใน array elements ให้เป็น string format ที่ต้องการ ทำได้ด้วย $dateToString ร่วมกับ $map ใน aggregate pipeline
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.demo104.insertOne({
"AppName" : "Online Book",
"Details" : [
{
"ClientName" : "Chris",
"Deadline" : new ISODate("2020-03-10")
}
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ed7fd9fd5fd66da21446f") }
แสดงข้อมูล
> db.demo104.find().pretty();
ผลลัพธ์:
{ "_id" : ObjectId("5e2ed7fd9fd5fd66da21446f"), "AppName" : "Online Book", "Details" : [
{ "ClientName" : "Chris", "Deadline" : ISODate("2020-03-10T00:00:00Z") }
] }
Query แปลง Deadline ใน Array ให้เป็น String (เดือน)
> db.demo104.aggregate([
{ "$match": {} },
{ "$project": {
"title": 1,
"Details": {
"$map": {
"input": "$Details",
"as": "out",
"in": {
"ClientName": "$$out.ClientName",
"Deadline": {
"$dateToString": { "format": "%m", "date": "$$out.Deadline" }
}
}
}
}
}}
]);
คำอธิบาย:
$map: วนลูปแต่ละ element ใน array Details (ตัวแปร $$out)$dateToString: แปลง Date → String ตาม format ที่ระบุformat: "%m": แสดงเฉพาะเดือน (01-12) | รูปแบบอื่น: %Y=ปี, %d=วัน, %H=%M=%S=เวลา"$title": 1: พยายามรวม field title แต่ตัวอย่างไม่มี field นี้ (จะได้ null)
ผลลัพธ์
{ "_id" : ObjectId("5e2ed7fd9fd5fd66da21446f"), "Details" : [
{ "ClientName" : "Chris", "Deadline" : "03" }
] }
เดือน 03 = มีนาคม ✓
Date Format Specifiers ที่ใช้บ่อย
| Specifier | ความหมาย | ตัวอย่าง |
|---|---|---|
%Y | ปี 4 หลัก | 2024 |
%m | เดือน 01-12 | 03 |
%d | วัน 01-31 | 10 |
%H | ชั่วโมง 00-23 | 14 |
%M | นาที 00-59 | 30 |
%S | วินาที 00-59 | 45 |
%L | มิลลิวินาที 000-999 | 123 |