Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ใช้ $dateToString กับ Array Items ใน MongoDB Aggregate

การแปลงวันที่ใน 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 ที่ใช้บ่อย

รูปแบบเต็ม (ISO 8601)

{ $dateToString: { format: "%Y-%m-%dT%H:%M:%S.%LZ", date: "$$out.Deadline" } }
// ผลลัพธ์: "2020-03-10T00:00:00.000Z"

ใช้ $dateToString ใน $project โดยตรง (ไม่ใช่ใน array)

db.demo104.aggregate([
  { $project: {
    DeadlineStr: { $dateToString: { format: "%Y-%m-%d", date: "$Details.Deadline" } }
  }}
])
// หมายเหตุ: $Details.Deadline จะเป็น array ต้อง $arrayElemAt หรือ $first ก่อน

สรุป: $map + $dateToString = วิธีมาตรฐานในการ format date ทุก element ใน array

Specifierความหมายตัวอย่าง
%Yปี 4 หลัก2024
%mเดือน 01-1203
%dวัน 01-3110
%Hชั่วโมง 00-2314
%Mนาที 00-5930
%Sวินาที 00-5945
%Lมิลลิวินาที 000-999123