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

แสดงรายการ MongoDB ตาม ObjectId ด้วย find() และ toArray()

บทความนี้สาธิตวิธีค้นหาและแสดงเอกสารใน 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 แทบแน่นอน และเรียงตามเวลาได้ประมาณการ