MongoDB में NAND लॉजिक लागू करना
$not ऑपरेटर जटिल अभिव्यक्ति को इनवर्ट नहीं करेगा। इसलिए, $ne ऑपरेटर के साथ $and या $or का उपयोग करें।
कलेक्शन बनाना
> 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 }
$or के साथ $ne क्वेरी (NAND लॉजिक)
> db.demo266.find({$or:[{"active1":{"$ne":true}},{"active2":{"$ne":true}}]});
परिणाम
{ "_id": ObjectId("5e480f4b1627c0c63e7dbaa7"), "active1": true, "active2": false }
{ "_id": ObjectId("5e480f561627c0c63e7dbaa9"), "active1": false, "active2": false }
{ "_id": ObjectId("5e480f701627c0c63e7dbaaa"), "active1": false, "active2": true }
व्याख्या
- NAND लॉजिक: NOT (A AND B) के बराबर है (NOT A) OR (NOT B)
- $ne: true: "true के बराबर नहीं" अर्थात false या अनुपस्थित
- $or: दोनों में से कोई भी शर्त पूरी होने पर डॉक्यूमेंट शामिल
- केवल वह डॉक्यूमेंट बाहर रहा जहां active1: true AND active2: true दोनों थे
सत्यता तालिका
| active1 | active2 | परिणाम |
|---|---|---|
| true | false | शामिल (active2 false) |
| true | true | बाहर (दोनों true) |
| false | false | शामिल (दोनों false) |
| false | true | शामिल (active1 false) |