ปัญหา: $not ไม่รองรับนิพจน์ซับซ้อน
ตัวดำเนินการ $not ไม่สามารถกลับค่าของนิพจน์ซับซ้อนได้โดยตรง วิธีแก้คือใช้ $or ร่วมกับ $ne แทน
สร้างคอลเลกชันตัวอย่าง
> db.demo266.insertOne({"active1":true,"active2":false});
{ "acknowledged": true, "insertedId": ObjectId("5e480f4b1627c0c63e7dbaa7") }
> db.demo266.insertOne({"active1":true,"active2":true});
{ "acknowledged": true, "insertedId": ObjectId("5e480f501627c0c63e7dbaa8") }
> db.demo266.insertOne({"active1":false,"active2":false});
{ "acknowledged": true, "insertedId": ObjectId("5e480f561627c0c63e7dbaa9") }
> db.demo266.insertOne({"active1":false,"active2":true});
{ "acknowledged": true, "insertedId": ObjectId("5e480f701627c0c63e7dbaaa") }
แสดงข้อมูลทั้งหมด
> db.demo266.find();
{ "_id": ObjectId("5e480f4b1627c0c63e7dbaa7"), "active1": true, "active2": false }
{ "_id": ObjectId("5e480f501627c0c63e7dbaa8"), "active1": true, "active2": true }
{ "_id": ObjectId("5e480f561627c0c63e7dbaa9"), "active1": false, "active2": false }
{ "_id": ObjectId("5e480f701627c0c63e7dbaaa"), "active1": false, "active2": true }
คิวรี NAND: active1 ≠ true OR active2 ≠ true
> db.demo266.find({$or:[{"active1":{"$ne":true}},{"active2":{"$ne":true}}]});
ผลลัพธ์: ไม่รวมเอกสารที่ active1 และ active2 เป็น true ทั้งคู่
{ "_id": ObjectId("5e480f4b1627c0c63e7dbaa7"), "active1": true, "active2": false }
{ "_id": ObjectId("5e480f561627c0c63e7dbaa9"), "active1": false, "active2": false }
{ "_id": ObjectId("5e480f701627c0c63e7dbaaa"), "active1": false, "active2": true }