MongoDB में $in ऑपरेटर का उपयोग करके नामों की सूची के आधार पर डॉक्यूमेंट्स फिल्टर करना
$in ऑपरेटर उन डॉक्यूमेंट्स को चुनता है जहां एक ऐरे फील्ड में निर्दिष्ट मानों में से कम से कम एक मान होता है। यह टैगिंग, वर्गीकरण, या किसी भी परिदृश्य के लिए उपयोगी है जहां आप पूर्वनिर्धारित मानों की सूची के आधार पर डॉक्यूमेंट्स को फिल्टर करना चाहते हैं।
नमूना डेटा बनाना
> db.tagCountDemo.insertOne({"ListOfNames":["John","Sam","Carol"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b387924bb85b3f48944") }
> db.tagCountDemo.insertOne({"ListOfNames":["Bob","David","John"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b4b7924bb85b3f48945") }
> db.tagCountDemo.insertOne({"ListOfNames":["Mike","Robert","Chris"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b5d7924bb85b3f48946") }
> db.tagCountDemo.insertOne({"ListOfNames":["James","Carol","Jace"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b717924bb85b3f48947") }
सभी डॉक्यूमेंट्स देखना
> db.tagCountDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd64b387924bb85b3f48944"), "ListOfNames" : [ "John", "Sam", "Carol" ] }
{ "_id" : ObjectId("5cd64b4b7924bb85b3f48945"), "ListOfNames" : [ "Bob", "David", "John" ] }
{ "_id" : ObjectId("5cd64b5d7924bb85b3f48946"), "ListOfNames" : [ "Mike", "Robert", "Chris" ] }
{ "_id" : ObjectId("5cd64b717924bb85b3f48947"), "ListOfNames" : [ "James", "Carol", "Jace" ] }
"John" या "Carol" वाले डॉक्यूमेंट्स के लिए क्वेरी करना
> db.tagCountDemo.find({"ListOfNames":{$in:['John','Carol']}});
आउटपुट:
{ "_id" : ObjectId("5cd64b387924bb85b3f48944"), "ListOfNames" : [ "John", "Sam", "Carol" ] }
{ "_id" : ObjectId("5cd64b4b7924bb85b3f48945"), "ListOfNames" : [ "Bob", "David", "John" ] }
{ "_id" : ObjectId("5cd64b717924bb85b3f48947"), "ListOfNames" : [ "James", "Carol", "Jace" ] }
व्याख्या
- क्वेरी उन डॉक्यूमेंट्स को लौटाती है जहां
ListOfNamesमें "John" या "Carol" (या दोनों) होता है। - पहला डॉक्यूमेंट दोनों से मेल खाता है, दूसरा "John" से मेल खाता है, चौथा "Carol" से मेल खाता है।
- तीसरा डॉक्यूमेंट बाहर रखा गया है क्योंकि इसमें कोई भी नाम नहीं है।
मिलान करने वाले डॉक्यूमेंट्स गिनना
मिलान करने वाले डॉक्यूमेंट्स की संख्या प्राप्त करने के लिए:
> db.tagCountDemo.count({"ListOfNames":{$in:['John','Carol']}});
मुख्य बिंदु
$inऐरे फील्ड्स पर कुशलता से काम करता है - यह जांचता है कि क्या ऐरे में कोई मान है।- केस-सेंसिटिव मिलान डिफ़ॉल्ट है; केस-इनसेंसिटिव खोज के लिए रेगेक्स का उपयोग करें।
- बड़े मान सेट्स के लिए,
$inसरणी को उचित आकार (आमतौर पर < 100K तत्व) तक सीमित रखें।