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

MongoDB: จำลอง NAND Operator ด้วย $or และ $ne


ปัญหา: $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 }