मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन स्वीकृत उत्तर अंतर को ठीक से नहीं समझाता है। यह व्यवहार में अंतर की व्याख्या करता है, लेकिन यह नहीं बताता कि यह वास्तव में कैसे काम करता है।
आपके mongoose
. में स्कीमा, आपका default
या तो निर्दिष्ट प्रकार का मान हो सकता है या एक फ़ंक्शन जो निर्दिष्ट प्रकार का मान लौटाता है। Date.now
जावास्क्रिप्ट फ़ंक्शन में बनाया गया है जो वर्तमान यूनिक्स टाइमस्टैम्प को एक संख्या के रूप में देता है।
अगर आप Date.now
. पास करते हैं default
. के रूप में आपके mongoose
. में स्कीमा, आप फ़ंक्शन पास कर रहे हैं और mongoose
हर बार किसी दस्तावेज़ को उस संपत्ति के लिए डिफ़ॉल्ट मान की आवश्यकता होने पर उस फ़ंक्शन को कॉल करेगा। इसका परिणाम वर्तमान समय में होता है, दस्तावेज़ के समय निर्माण , उस संपत्ति के मूल्य के रूप में संग्रहीत किया जा रहा है।
हालांकि, अगर आप Date.now()
pass पास करते हैं इसके बजाय, आप Date.now()
. द्वारा लौटाए गए मान को पास कर रहे हैं समारोह के बजाय। ऐसा करने से, आपके दस्तावेज़ों को वर्तमान समय स्कीमा के समय . मिलेगा निर्माण , उस संपत्ति के लिए डिफ़ॉल्ट मान के रूप में। इसका मतलब यह है कि आपके दस्तावेज़ नवीनतम परिनियोजन के समय को संग्रहीत करेंगे, जो शायद वह नहीं है जो आप चाहते हैं।
अगर Date.now
स्वीकृत उत्तर द्वारा सुझाए गए अनुसार "नया रिकॉर्ड बनाते समय वर्तमान डेटाटाइम के साथ मोंगोज़ द्वारा प्रतिस्थापित" स्थिर था, तो निम्नलिखित को तार्किक रूप से काम करना चाहिए:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
लेकिन Date.now
जादुई रूप से mongoose
. द्वारा प्रतिस्थापित नहीं किया गया है , यह एक फ़ंक्शन है और आप किसी फ़ंक्शन में कोई संख्या नहीं जोड़ सकते हैं। हालांकि, आप अपने स्वयं के फ़ंक्शन के अंदर एक फ़ंक्शन को कॉल कर सकते हैं और परिणाम में एक नंबर जोड़ सकते हैं, जैसा कि नीचे दिखाया गया है:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
चूंकि स्वीकृत उत्तर से यह स्पष्ट नहीं था कि Date.now
एक फ़ंक्शन है न कि mongoose
स्थिर, मैं इसे स्पष्ट करना चाहता था। Date.now()
. के बीच का अंतर और Date.now
क्या वह Date.now()
. है फ़ंक्शन को कॉल करता है और परिणाम देता है, जबकि Date.now
फ़ंक्शन को ही लौटाता है।