Query Boolean Field ด้วย $eq และ $ne
ใน MongoDB ค่า Boolean คือ true และ false สามารถ Query ได้โดยตรงหรือใช้โอเปอเรเตอร์เปรียบเทียบ
ตัวอย่างข้อมูล
> db.booleanQueryDemo.insertOne({"UserName":"John","UserAge":23,"isMarried":true});
> db.booleanQueryDemo.insertOne({"UserName":"Chris","UserAge":21,"isMarried":false});
> db.booleanQueryDemo.insertOne({"UserName":"Robert","UserAge":24,"isMarried":false});
> db.booleanQueryDemo.insertOne({"UserName":"David","UserAge":26,"isMarried":true});
Case 1: หาค่าเท่ากับ false (ใช้ $eq)
> db.booleanQueryDemo.find({isMarried: {$eq: false}}).pretty();
ผลลัพธ์: Chris, Robert
{ "UserName" : "Chris", "UserAge" : 21, "isMarried" : false }
{ "UserName" : "Robert", "UserAge" : 24, "isMarried" : false }
Case 2: หาค่าไม่เท่ากับ false = true (ใช้ $ne)
> db.booleanQueryDemo.find({isMarried: {$ne: false}}).pretty();
ผลลัพธ์: John, David
{ "UserName" : "John", "UserAge" : 23, "isMarried" : true }
{ "UserName" : "David", "UserAge" : 26, "isMarried" : true }
วิธีเขียนสั้นกว่า (Implicit)
// หา true
db.booleanQueryDemo.find({ isMarried: true });
db.booleanQueryDemo.find({ isMarried: { $eq: true } });
// หา false
db.booleanQueryDemo.find({ isMarried: false });
db.booleanQueryDemo.find({ isMarried: { $eq: false } });
// หาไม่ใช่ true (คือ false หรือ null หรือ missing)
db.booleanQueryDemo.find({ isMarried: { $ne: true } });
ข้อควรระวัง: Null และ Missing Field
| คิวรี | Match true | Match false | Match null | Match Missing |
|---|---|---|---|---|
{ isMarried: true } | ✅ | ❌ | ❌ | ❌ |
{ isMarried: false } | ❌ | ✅ | ❌ | ❌ |
{ isMarried: { $ne: true } } | ❌ | ✅ | ✅ | ✅ |
{ isMarried: { $eq: false } } | ❌ | ✅ | ✅ | ❌ |
{ isMarried: { $in: [false, null] } } | ❌ | ✅ | ✅ | ❌ |
แนวทางปฏิบัติที่ดี
- ใช้
{ field: true }หรือ{ field: false }สำหรับ Exact Match - ใช้
{ field: { $exists: true, $eq: true } }ถ้าต้องการบังคับให้มีฟิลด์นั้น - ตั้ง Default Value ให้ฟิลด์ Boolean ไว้ใน Application Layer