MongoDB में बूलियन फील्ड के आधार पर दस्तावेज़ फ़िल्टर करने के लिए, सीधे क्वेरी में true या false का उपयोग करें। नेस्टेड सरणी में फील्ड के अस्तित्व की जांच के लिए, डॉट नोटेशन के साथ $exists का उपयोग करें।
उदाहरण: नेस्टेड विवरण और isMarried फ्लैग
> db.demo367.insertOne({
"Id" : "102",
"details" : [
{ "Name" : "David" },
{ "Age" : 23, "CountryName" : "UK" }
],
"isMarried" : false
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e0b62ae06a1609a00ae8") }
> db.demo367.insertOne({
"Id" : "101",
"details" : [
{ "Name" : "Chris", "Subject" : [ "MySQL" ] },
{ "Age" : 21, "CountryName" : "US" }
],
"isMarried" : true
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e0be2ae06a1609a00ae9") }
दस्तावेज़ देखना
> db.demo367.find();
आउटपुट: दो दस्तावेज़ जिनमें अलग-अलग isMarried मान और अलग-अलग नेस्टेड फील्ड हैं।
टॉप-लेवल बूलियन द्वारा क्वेरी
> db.demo367.find({ "isMarried": true });
केवल दूसरा दस्तावेज़ लौटाता है।
नेस्टेड सरणी में फील्ड अस्तित्व द्वारा क्वेरी ($exists)
ऐसे दस्तावेज़ ढूंढें जहां details सरणी में कोई ऑब्जेक्ट Subject फील्ड नहीं रखता:
> db.demo367.find({ "details.Subject": { $exists: false } });
आउटपुट: पहला दस्तावेज़ (कोई Subject नहीं)।
व्याख्या
details.Subjectडॉट नोटेशन सरणी के अंदर किसी भी तत्व मेंSubjectफील्ड की जांच करता है।$exists: falseउन दस्तावेज़ों से मेल खाता है जहां सरणी में कोई भी तत्व फील्ड नहीं रखता।$exists: trueउन दस्तावेज़ों से मेल खाएगा जहां कम से कम एक तत्व में फील्ड हो।
नोट
मूल शीर्षक "$exists के साथ true/false मानों के आधार पर खोज" का उल्लेख करता है, लेकिन उदाहरण नेस्टेड फील्ड अस्तित्व दिखाता है। टॉप-लेवल बूलियन फील्ड के लिए, सीधे {isMarried: true} का उपयोग करें।