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

การแปลงค่าตัวเลขเป็นวันที่และดึงวันของเดือนใน MongoDB Aggregation

แปลง Timestamp เป็น Day of Month ใน MongoDB Aggregation

บทความนี้สาธิตวิธีการแปลงค่าตัวเลข (Unix Timestamp) ให้เป็น Date Object แล้วดึงค่า Day of Month (วันที่ของเดือน) ในขั้นตอน $project ของ Aggregation Pipeline

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

สร้าง collection ชื่อ demo209 มีฟิลด์ details เป็นอาร์เรย์ ที่แต่ละรายการมี dat (Unix timestamp) และ Name

> db.demo209.insertOne({
    "_id": "101",
    "details": [
        { "dat": 1528929908, "Name": "Chris" },
        { "dat": 1529082069, "Name": "Carol" }
    ],
    "Age": 25,
    "CountryName": "US"
});
{ "acknowledged": true, "insertedId": "101" }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.demo209.find().pretty();

ผลลัพธ์:

{ "_id": "101", "details": [
    { "dat": 1528929908, "Name": "Chris" },
    { "dat": 1529082069, "Name": "Carol" }
], "Age": 25, "CountryName": "US" }

ขั้นตอนที่ 3: Aggregation Pipeline แปลงและดึง Day of Month

1. $unwind: "$details" - แยกอาร์เรย์
2. $project - สร้างฟิลด์ใหม่ DayOfMonth โดย:
- คูณ details.dat ด้วย 1000 (แปลงวินาทีเป็นมิลลิวินาที)
- บวกกับ new Date(0) (Epoch) ผ่าน $add
- ใช้ $dayOfMonth ดึงวันที่

> db.demo209.aggregate({
    "$unwind": "$details"
}, {
    "$project": {
        "Age": 1,
        "CountryName": 1,
        "Name": "$details.Name",
        "DayOfMonth": {
            "$dayOfMonth": {
                "$add": [
                    new Date(0),
                    { "$multiply": ["$details.dat", 1000] }
                ]
            }
        }
    }
})

ผลลัพธ์ที่ได้

{ "_id": "101", "Age": 25, "CountryName": "US", "Name": "Chris", "DayOfMonth": 13 }
{ "_id": "101", "Age": 25, "CountryName": "US", "Name": "Carol", "DayOfMonth": 15 }

สรุป: MongoDB Aggregation รองรับ Operator ต่างๆ สำหรับจัดการ Date เช่น $dayOfMonth, $month, $year ซึ่งสามารถนำไปใช้กับ Timestamp ที่เก็บเป็นตัวเลขได้โดยการแปลงก่อนด้วย $add และ $multiply