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

วิธีตรวจสอบว่าเอกสารมีอยู่ใน MongoDB หรือไม่ (Return True/False)

ใช้ find() ร่วมกับ count() (หรือ countDocuments() ในเวอร์ชันใหม่) เพื่อตรวจสอบว่าเอกสารมีอยู่หรือไม่ คืนค่า Boolean

รูปแบบคำสั่ง

// วิธีเก่า (ยังทำงานได้)
db.collection.find({ query }).count() > 0;

// วิธีใหม่ (แนะนำ MongoDB 4.0+)
db.collection.countDocuments({ query }) > 0;

ตัวอย่างเต็มรูปแบบ

1. สร้างข้อมูลตัวอย่าง

> db.documentExistsOrNotDemo.insertOne({"UserId":101,"UserName":"John"});
> db.documentExistsOrNotDemo.insertOne({"UserId":102,"UserName":"Chris"});
> db.documentExistsOrNotDemo.insertOne({"UserId":102,"UserName":"Robert"});

2. แสดงข้อมูลทั้งหมด

{ "_id" : ..., "UserId" : 101, "UserName" : "John" }
{ "_id" : ..., "UserId" : 102, "UserName" : "Chris" }
{ "_id" : ..., "UserId" : 102, "UserName" : "Robert" }

Case 1: มีเอกสาร (UserId = 101)

> db.documentExistsOrNotDemo.find({ "UserId": 101 }).count() > 0;
True

Case 2: ไม่มีเอกสาร (UserId = 110)

> db.documentExistsOrNotDemo.find({ "UserId": 110 }).count() > 0;
False

วิธีอื่นที่มีประสิทธิภาพมากกว่า

ใช้ findOne() (หยุดหาเจอตัวแรก)

db.collection.findOne({ query }) !== null;

เร็วกว่า count() เพราะหยุดทันทีที่เจอ

ใช้ countDocuments() (MongoDB 4.0+)

db.collection.countDocuments({ query }) > 0;

แม่นยำกว่า count() (count() ใช้ metadata estimate บางครั้ง)

ตัวอย่างในโค้ด (JavaScript/Node.js)

// Async/await
const exists = await db.collection.findOne({ userId: 101 }) !== null;
if (exists) { console.log("User exists"); }

สรุป

  • ที่สุด: findOne() !== null - เร็วที่สุด หยุดทันทีเจอ
  • ทางเลือก: countDocuments() > 0 - แม่นยำ รองรับ filter ซับซ้อน
  • หลีกเลี่ยง: count() - deprecated ใน driver ใหม่ๆ
  • คืนค่า Boolean (true/false) ใช้ใน if condition ได้เลย