MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

नेवला एकत्रीकरण इनपुट तिथि के अनुसार फ़िल्टर नहीं करता है

नेवला के पास "स्कीमा" है जिसके लिए यह आपके लिए "ऑटोकास्टिंग" नामक यह जादुई चीज़ करता है। डिज़ाइनर (ओं) के यहाँ विशिष्ट मामला यह है कि "वेब" इंटरेक्शन से सभी इनपुट जैसे GET और POST मूल रूप से एक "स्ट्रिंग" में निहित है।

कोई सहायक है या नहीं, जो पैरामीटर को कुंजियों और मूल्यों के साथ वस्तुओं में बनाता है, वे सभी "मान" अभी भी "स्ट्रिंग्स" हैं, या संभवतः उसी "हेल्पर्स" द्वारा सीधे संख्यात्मक बनाए जाते हैं जहां उपयुक्त हो। यह सामान्य वेब फ्रेमवर्क डिज़ाइन है।

इसलिए जब आप .find() . जारी करते हैं , यह फ़ंक्शन पूरी तरह से अक्षम . है फ़ील्ड/गुणों को छोड़ कर अन्य लौटाई गई सामग्री को बदलने के लिए, इसलिए "स्कीमा" लागू किया जाता है।

.aggregate() विधि पूरी तरह . है को अलग। इसका पूरा अस्तित्व संशोधित . है दस्तावेजों और संग्रह में निहित सामग्री। इसका परिणाम यह होता है कि किसी स्कीमा को लागू करना "असंभव" होता है।

इसलिए, "ऑटोकास्टिंग" .find() . जैसी विधियों में मौजूद है नहीं होता , और आपको तत्वों (जैसे कि "स्ट्रिंग" आपकी "तारीख" को इस रूप में भेजा जा रहा है) को सही प्रकार में डालने की आवश्यकता है:

Reservation.aggregate([
   { "$match": { "createdAt": { "$lte": new Date(req.endDate) } } }
])

भले ही आप केवल एक $match कर रहे हों और यह कि आपने किसी भी तरह से स्कीमा को "संशोधित" नहीं किया है, नेवला इसे "अनुमान" नहीं करता है और स्कीमा में मेल खाने वाले फ़ील्ड में डालने का प्रयास नहीं करता है।

यहाँ तर्क यह है कि एक $match चरण या ऐसा कुछ भी जो "प्रकार" के लिए बाध्य हो सकता है, पाइपलाइन के भीतर कहीं भी हो सकता है। इस तरह इस बात की कोई गारंटी नहीं है कि पाइपलाइन चरण में जिन दस्तावेज़ों पर कार्रवाई की जा रही है, वे मूल संग्रह स्कीमा से मिलते-जुलते हैं।

यकीनन यह "कर सकता था" संभवतः इस तथ्य पर विचार करें कि यह है पहला पाइपलाइन चरण जहां कुछ भी संभवतः नहीं बदल सकता था और एक समान निरीक्षण करता था। लेकिन ऐसा नहीं है कि वर्तमान कोड आधार कैसे काम करता है।

तो संक्षेप में, एकत्रीकरण पाइपलाइन का उपयोग करते समय, सभी ऑब्जेक्ट्स जिन्हें विशेष रूप से एक प्रकार (दिनांक, ऑब्जेक्ट आईडी, आदि) में डालने की आवश्यकता होती है, को आपके कोड में "मैन्युअल रूप से" डालने की आवश्यकता होती है, यह मानने के बजाय कि नेवला आपके लिए यह करने जा रहा है अन्य तरीकों की तरह।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $push ने बहुत अधिक मेमोरी का उपयोग किया और डिस्क पर फैल नहीं सकता। मेमोरी लिमिट:104857600 बाइट्स

  2. मोंगोडब संग्रह में दस्तावेजों की संख्या की गणना कैसे करें

  3. मोंगो / नेवला एकत्रीकरण - $redact और $cond मुद्दे

  4. उन दस्तावेज़ों को खोजें जहाँ एक फ़ील्ड एक सरणी में दूसरे के साथ तुलना करता है

  5. मोंगोडब में संयोजन का उपयोग $regex