मुझे यकीन नहीं है कि आप इसे अपने वर्तमान स्कीमा के साथ सुंदर ढंग से हल करने में सक्षम होंगे; slotTypes
उप-दस्तावेजों की एक सरणी होनी चाहिए, जो आपके $elemMatch
. को अनुमति देगी काम करने के लिए क्वेरी। अभी, यह संख्यात्मक-ईश कुंजियों वाली एक वस्तु है।
यानी आपका दस्तावेज़ स्कीमा कुछ इस तरह होना चाहिए:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
यदि डेटा लेआउट बदलना कोई विकल्प नहीं है, तो आपको $where
के साथ मिलान खोजने के लिए मूल रूप से प्रत्येक दस्तावेज़ को स्कैन करने की आवश्यकता होगी . यह धीमा, अनुक्रमणीय और अजीब है।
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
आपको $where पर दस्तावेज़ पढ़ना चाहिए यह सुनिश्चित करने के लिए कि आप इसकी चेतावनियों को समझते हैं, और जो कुछ भी पवित्र है, उसके प्यार के लिए, समारोह में अपने इनपुट को साफ करें; यह लाइव कोड है जो आपके डेटाबेस के संदर्भ में क्रियान्वित हो रहा है।