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

การเรียงลำดับตามคอลัมน์ ObjectId ใน MongoDB

เรียงลำดับเอกสารตาม _id (ObjectId) ด้วย sort()

ฟิลด์ _id ใน MongoDB เป็น ObjectId ซึ่งประกอบด้วย Timestamp (4 ไบต์แรก) Machine ID, Process ID, และ Counter การเรียงตาม _id จึงเทียบเท่ากับการเรียงตามเวลาสร้างเอกสาร (ประมาณ)

ตัวอย่างข้อมูลทดสอบ

> db.demo403.insertOne({ "Name": "Chris" });
> db.demo403.insertOne({ "Name": "David" });
> db.demo403.insertOne({ "Name": "Bob" });
> db.demo403.insertOne({ "Name": "Adam" });

แสดงข้อมูล (เรียงตาม _id ใส่เข้าไป)

> db.demo403.find();

ผลลัพธ์:

{ "_id": ObjectId("5e6f89b0fac4d418a017858e"), "Name": "Chris" }
{ "_id": ObjectId("5e6f89b2fac4d418a017858f"), "Name": "David" }
{ "_id": ObjectId("5e6f89b5fac4d418a0178590"), "Name": "Bob" }
{ "_id": ObjectId("5e6f89b8fac4d418a0178591"), "Name": "Adam" }

คำสั่งเรียงตาม _id จากใหม่ไปเก่า (Descending)

> db.demo403.find().sort({ _id: -1 });

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

{ "_id": ObjectId("5e6f89b8fac4d418a0178591"), "Name": "Adam" }
{ "_id": ObjectId("5e6f89b5fac4d418a0178590"), "Name": "Bob" }
{ "_id": ObjectId("5e6f89b2fac4d418a017858f"), "Name": "David" }
{ "_id": ObjectId("5e6f89b0fac4d418a017858e"), "Name": "Chris" }

คำอธิบาย

  • sort({ _id: 1 }): เรียงเก่าไปใหม่ (Ascending) - ตามลำดับเวลาสร้าง
  • sort({ _id: -1 }): เรียงใหม่ไปเก่า (Descending) - ล่าสุดอยู่บนสุด

ข้อดีของการเรียงตาม ObjectId

  • ไม่ต้องมีฟิลด์ createdAt แยกต่างหาก
  • ObjectId มี Timestamp built-in (4 ไบต์แรก = Unix timestamp วินาที)
  • ดัชนี _id มีอยู่โดยอัตโนมัติ (Unique Index) เรียงได้เร็ว
  • สามารถดึง Timestamp ได้: ObjectId("...").getTimestamp()

กรณีที่ควรใช้ createdAt แทน

  • ต้องการเวลาที่แม่นยำถึงมิลลิวินาที (ObjectId แค่วินาที)
  • มีการ import ข้อมูลที่ _id ไม่สะท้อนเวลาจริง
  • ต้องการ Timezone หรือรูปแบบวันที่เฉพาะ