บทความนี้สาธิตวิธีค้นหาและแสดงเอกสารใน MongoDB โดยระบุ ObjectId โดยตรงใน Query รวมถึงใช้ toArray() เพื่อแปลง Cursor เป็น Array
สร้างข้อมูลตัวอย่าง
> db.findByObjectIdDemo.insertOne({"ClientName":"Larry","ClientAge":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68cd657806ebf1256f11a") }
> db.findByObjectIdDemo.insertOne({"ClientName":"Chris","ClientAge":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68cdc57806ebf1256f11b") }
> db.findByObjectIdDemo.insertOne({"ClientName":"David","ClientAge":38,"isMarried":true});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68cf657806ebf1256f11c") }
แสดงข้อมูลทั้งหมด
> db.findByObjectIdDemo.find().pretty();
{
"_id" : ObjectId("5cd68cd657806ebf1256f11a"),
"ClientName" : "Larry",
"ClientAge" : 23
}
{
"_id" : ObjectId("5cd68cdc57806ebf1256f11b"),
"ClientName" : "Chris",
"ClientAge" : 26
}
{
"_id" : ObjectId("5cd68cf657806ebf1256f11c"),
"ClientName" : "David",
"ClientAge" : 38,
"isMarried" : true
}
ค้นหาตาม ObjectId แบบเจาะจง (ใช้ new ObjectId())
> db.findByObjectIdDemo.find({_id: new ObjectId("5cd68cf657806ebf1256f11c")}).toArray(function(err, myDocument) {
console.log(myDocument);
});
ผลลัพธ์
[
{
"_id" : ObjectId("5cd68cf657806ebf1256f11c"),
"ClientName" : "David",
"ClientAge" : 38,
"isMarried" : true
}
]
คำอธิบาย
new ObjectId("...")- สร้าง ObjectId Object จาก String Hex 24 ตัวอักษรfind({_id: ...})- Query ตรง _id (Primary Key, ใช้ Index อัตโนมัติ).toArray()- แปลง Cursor เป็น JavaScript Array (สำหรับใช้ใน Callback/Script)callback(err, docs)- รูปแบบ Asynchronous Callback ของ Mongo Shell
วิธีอื่นๆ ในการ Query ด้วย ObjectId
// 1. findOne() - คืน Document เดียว (ไม่ใช่ Cursor)
db.findByObjectIdDemo.findOne({_id: ObjectId("5cd68cf657806ebf1256f11c")});
// 2. find() แบบง่าย (ใน Shell จะ Pretty Print อัตโนมัติ)
db.findByObjectIdDemo.find({_id: ObjectId("5cd68cf657806ebf1256f11c")});
// 3. ใช้ String โดยตรง (MongoDB จะ Cast ให้อัตโนมัติในบาง Version)
db.findByObjectIdDemo.find({_id: "5cd68cf657806ebf1256f11c"}); // อาจต้องใช้ ObjectId()
สร้าง ObjectId ใหม่ (Generate)
> new ObjectId()
ObjectId("5cd7bf2f6d78f205348bc646")
โครงสร้าง ObjectId (12 Bytes)
- 4 Bytes: Timestamp (Seconds since epoch)
- 5 Bytes: Random Value (Machine + Process ID)
- 3 Bytes: Incrementing Counter
ทำให้ Unique แทบแน่นอน และเรียงตามเวลาได้ประมาณการ