अद्यतन: (5 साल बाद)
नोट: यदि आप कप्पा आर्किटेक्चर ( इवेंट सोर्सिंग + सीक्यूआरएस ) का उपयोग करने का निर्णय लेते हैं , तो आपको अद्यतन तिथि की आवश्यकता नहीं है। चूँकि आपका डेटा एक अपरिवर्तनीय, एपेंड-ओनली ईवेंट लॉग है, इसलिए आपको केवल ईवेंट क्रिएट की गई तिथि की आवश्यकता है। लैम्बडा आर्किटेक्चर के समान , नीचे वर्णित है। फिर आपका एप्लिकेशन स्थिति ईवेंट लॉग (व्युत्पन्न डेटा) का एक प्रक्षेपण है। यदि आपको मौजूदा इकाई के बारे में बाद की घटना प्राप्त होती है, तो आप अपनी इकाई के लिए अद्यतन तिथि के रूप में उस घटना की बनाई गई तारीख का उपयोग करेंगे। यह एक सामान्य रूप से प्रयोग किया जाता है (और आमतौर पर गलत समझा जाता है) micososervice सिस्टम में अभ्यास।
अपडेट करें: (4 साल बाद)
यदि आप ObjectId
अपने _id
क्षेत्र (जो आमतौर पर मामला है) के रूप में उपयोग करते हैं , तो आपको बस इतना करना है:
let document = {
updatedAt: new Date(),
}
_id
फ़ील्ड से निर्मित टाइमस्टैम्प प्राप्त करने के तरीके के बारे में नीचे मेरे मूल उत्तर की जाँच करें । यदि आपको बाहरी सिस्टम से आईडी का उपयोग करने की आवश्यकता है, तो रोमन रार्न नेस्टरोव के उत्तर की जांच करें।
अपडेट करें: (2.5 वर्ष बाद)
अब आप mongoose version> = 4.0 के साथ #testestamps विकल्प का उपयोग कर सकते हैं ।
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
यदि आपके स्कीमा में टाइमस्टैम्प, मानगो असाइन createdAt
और updatedAt
फ़ील्ड सेट हैं , तो असाइन किया गया प्रकार हैDate
।
आप टाइमस्टैम्प दायर किए गए नामों को भी निर्दिष्ट कर सकते हैं:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
नोट: यदि आप महत्वपूर्ण डेटा के साथ एक बड़े एप्लिकेशन पर काम कर रहे हैं तो आपको अपने दस्तावेज़ों को अपडेट करने पर पुनर्विचार करना चाहिए। मैं आपको अपरिवर्तनीय, परिशिष्ट-केवल डेटा ( लैम्ब्डा आर्किटेक्चर ) के साथ काम करने की सलाह दूंगा । इसका मतलब यह है कि आप केवल आवेषण की अनुमति देते हैं। अपडेट और डिलीट की अनुमति नहीं दी जानी चाहिए! यदि आप एक रिकॉर्ड को "हटाना" चाहते हैं, तो आप आसानी से कुछ timestamp
/ version
दायर के साथ दस्तावेज़ का एक नया संस्करण डाल सकते हैं और फिर एक deleted
फ़ील्ड सेट कर सकते हैं true
। इसी तरह यदि आप किसी दस्तावेज़ को अपडेट करना चाहते हैं - आप एक नया अपडेट करें, जिसमें उपयुक्त फ़ील्ड्स को अपडेट किया जाए और बाकी फ़ील्ड्स को कॉपी किया जाए। तब इस दस्तावेज़ को क्वेरी करने के लिए आपको सबसे नया टाइमस्टैम्प या उच्चतम संस्करण के साथ एक मिलेगा। "डिलीट" नहीं (adeleted
क्षेत्र अपरिभाषित या गलत है)।
डेटा अपरिवर्तनीयता सुनिश्चित करती है कि आपका डेटा डीबग करने योग्य है - आप हर दस्तावेज़ के इतिहास का पता लगा सकते हैं। यदि आप कुछ गलत करते हैं तो आप दस्तावेज़ के पिछले संस्करण में भी रोलबैक कर सकते हैं। यदि आप इस तरह की वास्तुकला के साथ जाते हैं ObjectId.getTimestamp()
, तो आपको इसकी आवश्यकता है, और यह मोंगोज़ पर निर्भर नहीं है।
मूल ANSWER:
यदि आप ऑब्जेक्टआईड को अपने पहचान क्षेत्र के रूप में उपयोग कर रहे हैं, तो आपको फ़ील्ड की आवश्यकता नहीं है created_at
। ObjectIds में एक विधि होती है जिसे कहा जाता है getTimestamp()
।
ObjectId ( "507c7f79bcf86cd7994f6c0e")। GetTimestamp ()
यह निम्न आउटपुट लौटाएगा:
ISODate ( "2012-10-15T21: 26: 17Z")
अधिक जानकारी यहां मैं कैसे मानगो ऑब्जेक्टिफ़ से बनाई गई तारीख को निकालते हैं
जोड़ने के लिए updated_at
दायर किया गया तो आप इस का उपयोग करने की जरूरत है:
var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});