@जेसन कस्ट इसे पहले ही बहुत अच्छी तरह से समझाया गया है - इस स्थिति में अक्सर सबसे अच्छा समाधान होता है कि Users
को क्वेरी करने से रोकने के लिए स्कीमा को बदल दिया जाए। अलग संग्रह में संग्रहीत दस्तावेजों के गुणों द्वारा।
यहां सबसे अच्छा समाधान है जिसके बारे में मैं सोच सकता हूं कि यह आपको ऐसा करने के लिए मजबूर नहीं करेगा, हालांकि (क्योंकि आपने टिप्पणी में कहा था कि आप नहीं कर सकते)।
Users.find().populate({
path: 'email',
match: {
type: 'Gmail'
}
}).exec(function(err, users) {
users = users.filter(function(user) {
return user.email; // return only users with email matching 'type: "Gmail"' query
});
});
हम यहां जो कर रहे हैं वह केवल email
को पॉप्युलेट कर रहा है मेल खाने वाली अतिरिक्त क्वेरी (match
.populate()
. में विकल्प कॉल) - अन्यथा email
Users
. में फ़ील्ड दस्तावेज़ों को null
पर सेट किया जाएगा ।
जो कुछ बचा है वह है .filter
लौटे Users
. पर सरणी, जैसे आपके मूल प्रश्न में - केवल बहुत सरल, बहुत सामान्य जांच के साथ। जैसा कि आप देख सकते हैं - या तो email
वहां है या नहीं।