MongoDB में $exists और $ne को संयोजित करके मौजूद, गैर-खाली फील्ड्स के लिए फ़िल्टर करना
$exists ऑपरेटर जांचता है कि क्या एक फील्ड डॉक्यूमेंट में मौजूद है। $ne (नॉट इक्वल) ऑपरेटर एक विशिष्ट मान से मेल नहीं खाने वाले मानों से मेल खाता है। संयुक्त, वे उन डॉक्यूमेंट्स को फ़िल्टर करते हैं जहां एक फील्ड मौजूद है और खाली/नल नहीं है।
नमूना डेटा बनाना
> db.existsDemo.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7c3916d78f205348bc650") }
> db.existsDemo.insertOne({"Name":"","Age":null});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7c39a6d78f205348bc651") }
> db.existsDemo.insertOne({"Name":null,"Age":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7c3a66d78f205348bc652") }
> db.existsDemo.insertOne({"Age":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7c3c36d78f205348bc653") }
सभी डॉक्यूमेंट्स देखना
> db.existsDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd7c3916d78f205348bc650"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5cd7c39a6d78f205348bc651"), "Name" : "", "Age" : null }
{ "_id" : ObjectId("5cd7c3a66d78f205348bc652"), "Name" : null, "Age" : 24 }
{ "_id" : ObjectId("5cd7c3c36d78f205348bc653"), "Age" : 23 }
$exists: true और $ne: "" के साथ क्वेरी करना
> db.existsDemo.find({
"$and": [
{ "Name": { "$exists": true } },
{ "Name": { "$ne": "" } }
]
});
आउटपुट:
{ "_id" : ObjectId("5cd7c3916d78f205348bc650"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5cd7c3a66d78f205348bc652"), "Name" : null, "Age" : 24 }
व्याख्या
{ Name: { $exists: true } }- उन डॉक्यूमेंट्स से मेल खाता है जहां Name फील्ड मौजूद है (पहले 3 डॉक्यूमेंट्स)।{ Name: { $ne: "" } }- उन डॉक्यूमेंट्स से मेल खाता है जहां Name खाली स्ट्रिंग नहीं है (पहला, तीसरा, चौथा डॉक्यूमेंट्स)।$andदोनों को संयोजित करता है: Name मौजूद होना चाहिए और खाली स्ट्रिंग नहीं होना चाहिए।- परिणाम: डॉक्यूमेंट 1 (Chris) और डॉक्यूमेंट 3 (null Name)।
- डॉक्यूमेंट 2 बाहर रखा गया (खाली स्ट्रिंग)। डॉक्यूमेंट 4 बाहर रखा गया (Name अनुपस्थित)।
नोट: null मान
$ne: "" null को नहीं** बाहर करता है क्योंकि null != ""। यदि आप null को भी बाहर करना चाहते हैं:
db.collection.find({
$and: [
{ "Name": { $exists: true } },
{ "Name": { $ne: "" } },
{ "Name": { $ne: null } }
]
});
या संक्षिप्त रूप से:
db.collection.find({ "Name": { $exists: true, $nin: ["", null] } });
मुख्य बिंदु
$exists: true- फील्ड डॉक्यूमेंट में मौजूद होना चाहिए।$ne: value- फील्ड मान निर्दिष्ट मान के बराबर नहीं होना चाहिए।- उपयोगकर्ता-इनपुट फील्ड्स को मान्य करने के लिए संयोजित करें (उपस्थित, खाली नहीं, null नहीं)।
$nin(नॉट इन) एक ही फील्ड पर मल्टीपल बहिष्करण मानों के लिए साफ सिंटैक्स है।