नेवला के पास "स्कीमा" है जिसके लिए यह आपके लिए "ऑटोकास्टिंग" नामक यह जादुई चीज़ करता है। डिज़ाइनर (ओं) के यहाँ विशिष्ट मामला यह है कि "वेब" इंटरेक्शन से सभी इनपुट जैसे GET
और POST
मूल रूप से एक "स्ट्रिंग" में निहित है।
कोई सहायक है या नहीं, जो पैरामीटर को कुंजियों और मूल्यों के साथ वस्तुओं में बनाता है, वे सभी "मान" अभी भी "स्ट्रिंग्स" हैं, या संभवतः उसी "हेल्पर्स" द्वारा सीधे संख्यात्मक बनाए जाते हैं जहां उपयुक्त हो। यह सामान्य वेब फ्रेमवर्क डिज़ाइन है।
इसलिए जब आप .find()
. जारी करते हैं , यह फ़ंक्शन पूरी तरह से अक्षम . है फ़ील्ड/गुणों को छोड़ कर अन्य लौटाई गई सामग्री को बदलने के लिए, इसलिए "स्कीमा" लागू किया जाता है।
.aggregate()
विधि पूरी तरह . है को अलग। इसका पूरा अस्तित्व संशोधित . है दस्तावेजों और संग्रह में निहित सामग्री। इसका परिणाम यह होता है कि किसी स्कीमा को लागू करना "असंभव" होता है।
इसलिए, "ऑटोकास्टिंग" .find()
. जैसी विधियों में मौजूद है नहीं होता , और आपको तत्वों (जैसे कि "स्ट्रिंग" आपकी "तारीख" को इस रूप में भेजा जा रहा है) को सही प्रकार में डालने की आवश्यकता है:
Reservation.aggregate([
{ "$match": { "createdAt": { "$lte": new Date(req.endDate) } } }
])
भले ही आप केवल एक $match
कर रहे हों और यह कि आपने किसी भी तरह से स्कीमा को "संशोधित" नहीं किया है, नेवला इसे "अनुमान" नहीं करता है और स्कीमा में मेल खाने वाले फ़ील्ड में डालने का प्रयास नहीं करता है।
यहाँ तर्क यह है कि एक $match
चरण या ऐसा कुछ भी जो "प्रकार" के लिए बाध्य हो सकता है, पाइपलाइन के भीतर कहीं भी हो सकता है। इस तरह इस बात की कोई गारंटी नहीं है कि पाइपलाइन चरण में जिन दस्तावेज़ों पर कार्रवाई की जा रही है, वे मूल संग्रह स्कीमा से मिलते-जुलते हैं।
यकीनन यह "कर सकता था" संभवतः इस तथ्य पर विचार करें कि यह है पहला पाइपलाइन चरण जहां कुछ भी संभवतः नहीं बदल सकता था और एक समान निरीक्षण करता था। लेकिन ऐसा नहीं है कि वर्तमान कोड आधार कैसे काम करता है।
तो संक्षेप में, एकत्रीकरण पाइपलाइन का उपयोग करते समय, सभी ऑब्जेक्ट्स जिन्हें विशेष रूप से एक प्रकार (दिनांक, ऑब्जेक्ट आईडी, आदि) में डालने की आवश्यकता होती है, को आपके कोड में "मैन्युअल रूप से" डालने की आवश्यकता होती है, यह मानने के बजाय कि नेवला आपके लिए यह करने जा रहा है अन्य तरीकों की तरह।