MongoDB में ऐरे एलिमेंट्स के आधार पर दस्तावेज़ फ़िल्टर करना
जब आपको ऐसे दस्तावेज़ खोजने हों जहां ऐरे में कम से कम एक आइटम किसी अन्य सेट में मौजूद न हो, तो रेगुलर एक्सप्रेशन (regex) का उपयोग किया जा सकता है।
सैंपल डेटा बनाना
> db.demo228.insertOne({"Subjects":["MongoDB","Java"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3fa51f03d395bdc213473b") }
> db.demo228.insertOne({"Subjects":["MongoDB","Java","MySQL"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3fa52c03d395bdc213473c") }
सभी दस्तावेज़ देखना
> db.demo228.find();
आउटपुट:
{ "_id" : ObjectId("5e3fa51f03d395bdc213473b"), "Subjects" : [ "MongoDB", "Java" ] }
{ "_id" : ObjectId("5e3fa52c03d395bdc213473c"), "Subjects" : [ "MongoDB", "Java", "MySQL" ] }
रेगुलर एक्सप्रेशन से क्वेरी
निम्न क्वेरी उन दस्तावेज़ों को खोजती है जहां Subjects ऐरे में "MongoDB" या "Java" के अलावा कोई मान हो:
> db.demo228.find({ "Subjects": /^(?!MongoDB|Java)/ });
आउटपुट:
{ "_id" : ObjectId("5e3fa52c03d395bdc213473c"), "Subjects" : [ "MongoDB", "Java", "MySQL" ] }
बेहतर विकल्प: $nin ऑपरेटर
रेगुलर एक्सप्रेशन के बजाय MongoDB का $nin ऑपरेटर अधिक कुशल और पठनीय है:
> db.demo228.find({ "Subjects": { $nin: ["MongoDB", "Java"] } });
स्पष्टीकरण
^(?!MongoDB|Java)- नेगेटिव लुकअहेड रेगुलर एक्सप्रेशन जो "MongoDB" या "Java" से शुरू न होने वाले स्ट्रिंग्स से मेल खाता है$nin- निर्दिष्ट मानों में से कोई भी ऐरे में मौजूद न होने पर मिलान करता है- बड़े डेटासेट के लिए
$ninइंडेक्स का बेहतर उपयोग करता है