यदि आप किसी तत्व को केवल एक सरणी में फ़िल्टर करते हैं, भले ही केवल एक तत्व मेल खाता हो, पूरी सरणी वापस कर दी जाएगी, और यदि कोई मेल नहीं है तो कुछ भी वापस नहीं किया जाएगा। इसलिए, आपको $unwind
. का उपयोग करके अपनी सरणी को अलग-अलग दस्तावेज़ों में अलग करने की आवश्यकता है ऑपरेटर, और उसके बाद ही, $match
. का उपयोग करके परिणामों को फ़िल्टर करने का प्रयास करें ।
निम्न क्वेरी आपकी समस्या का समाधान कर सकती है :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
काम करना mongoplayground
यदि हो सके तो बस एक टिप :आपको प्रत्येक उत्पाद को एक अलग दस्तावेज़ में संग्रहीत करना चाहिए, हालांकि MongoDB स्कीमा रहित है और हमें दस्तावेज़ के लगभग किसी भी प्रारूप की अनुमति देता है, याद रखें कि प्रत्येक दस्तावेज़ में एक नियमित संबंधपरक डेटाबेस में जानकारी की एक पंक्ति के बराबर होना चाहिए। अन्यथा, आपको ये समस्याएं और इसके अतिरिक्त, प्रदर्शन संबंधी समस्याएं होने लगेंगी।