ใช้ 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 ได้เลย