आपको अपने कोड के निष्पादन के क्रम को समझने की आवश्यकता है:
-
नेवला डेटाबेस से सभी पुस्तकें प्राप्त करता है जहाँ
{_creator:{$ne:null}}
. मोंगो केवल पुस्तकों के संग्रह के संदर्भ को देख रहा है ताकि यह निर्धारित किया जा सके कि कौन से दस्तावेज़ वापस करने हैं। आपकी पुस्तक में अभी भी एक लेखक का संदर्भ है, और मोंगो यह नोटिस नहीं करेगा कि लेखक संग्रह में कोई मेल खाने वाला लेखक नहीं है, इसलिए आपकी पुस्तक भरी हुई है। -
mongoose सभी लौटाए गए परिणामों को पॉप्युलेट कर रहा है:इसलिए यह लेखकों के संग्रह से लेखकों को लोड कर रहा है और संदर्भों को वास्तविक वस्तुओं से बदल देता है। आपकी पुस्तक के लिए यह एक मेल खाने वाला लेखक नहीं ढूंढता है, इसलिए यह
null
डालता है वहां।
यही कारण है कि आप अपनी परिणाम सूची के साथ समाप्त होते हैं।
मोंगो जॉइन का समर्थन नहीं करता है - इसलिए आप ऐसी क्वेरी नहीं कर सकते हैं जिसमें एक से अधिक संग्रह से डेटा शामिल हो। पॉप्युलेट आपकी परिणाम सूची में संदर्भों को वास्तविक डेटा से बदलने का एक तरीका है, आप अपने जहां क्लॉज़ के हिस्से के रूप में कभी भी पॉप्युलेट डेटा का उपयोग नहीं कर सकते हैं।
अपनी समस्या का समाधान करने के लिए आप या तो कर सकते हैं:
- जेएस कोड में अपनी अंतिम परिणाम सूची को फ़िल्टर करें, उदा। लॉश लाइब्रेरी के _.filter के साथ।
- अपनी सभी पुस्तकों को अपडेट करें और जब भी आप किसी लेखक को हटाते हैं तो संदर्भ हटा दें। ऐसा करने के लिए आप लेखक-स्कीमा पर हुक का उपयोग कर सकते हैं।
AuthorSchema.post('remove', function(doc) {// update your books here});