अद्यतन करें: (5 साल बाद)
<ब्लॉकक्वॉट>नोट: यदि आप कप्पा आर्किटेक्चर का उपयोग करने का निर्णय लेते हैं (इवेंट सोर्सिंग + CQRS ), तो आपको अद्यतन तिथि की बिल्कुल भी आवश्यकता नहीं है। चूंकि आपका डेटा एक अपरिवर्तनीय, केवल संलग्न करने वाला ईवेंट लॉग है, इसलिए आपको कभी भी केवल ईवेंट बनाने की तिथि की आवश्यकता होती है। लैम्ब्डा आर्किटेक्चर . के समान , नीचे वर्णित। तब आपकी एप्लिकेशन स्थिति इवेंट लॉग (व्युत्पन्न डेटा) का प्रक्षेपण है। यदि आपको मौजूदा निकाय के बारे में कोई अनुवर्ती ईवेंट प्राप्त होता है, तो आप उस ईवेंट की बनाई गई तिथि को अपनी इकाई के लिए अपडेट की गई तिथि के रूप में उपयोग करेंगे। यह माइक्रोसर्विस सिस्टम में आमतौर पर इस्तेमाल किया जाने वाला (और आमतौर पर गलत समझा जाने वाला) अभ्यास है।
अद्यतन करें: (4 साल बाद)
अगर आप ObjectId
. का इस्तेमाल करते हैं आपके _id
. के रूप में फ़ील्ड (जो आमतौर पर ऐसा होता है), तो आपको बस इतना करना है:
let document = {
updatedAt: new Date(),
}
_id
. से बनाए गए टाइमस्टैम्प को कैसे प्राप्त करें, इस बारे में मेरा मूल उत्तर नीचे देखें फ़ील्ड। यदि आपको बाहरी सिस्टम से आईडी का उपयोग करने की आवश्यकता है, तो रोमन Rhrn Nesterov का उत्तर देखें।
अद्यतन करें: (2.5 साल बाद)
अब आप नेवला संस्करण>=4.0 के साथ #timestamps विकल्प का उपयोग कर सकते हैं।
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
set सेट किया true
. के लिए फ़ील्ड . इसी तरह यदि आप किसी दस्तावेज़ को अपडेट करना चाहते हैं - आप अपडेट किए गए उपयुक्त फ़ील्ड के साथ एक नया बनाते हैं और शेष फ़ील्ड को कॉपी किया जाता है। फिर इस दस्तावेज़ को क्वेरी करने के लिए आपको नवीनतम टाइमस्टैम्प या उच्चतम संस्करण वाला एक मिलेगा जो "हटाया" नहीं है। (deleted
फ़ील्ड अपरिभाषित या गलत है').
डेटा अपरिवर्तनीयता सुनिश्चित करती है कि आपका डेटा डिबग करने योग्य है - आप प्रत्येक दस्तावेज़ के इतिहास का पता लगा सकते हैं। यदि कुछ गलत हो जाता है, तो आप किसी दस्तावेज़ के पिछले संस्करण में रोलबैक भी कर सकते हैं। यदि आप इस तरह के एक आर्किटेक्चर के साथ जाते हैं ObjectId.getTimestamp()
आपको बस इतना ही चाहिए, और यह नेवला पर निर्भर नहीं है।
मूल उत्तर:
यदि आप अपने पहचान क्षेत्र के रूप में ObjectId का उपयोग कर रहे हैं तो आपको created_at
. की आवश्यकता नहीं है खेत। ObjectIds में getTimestamp()
. नामक एक विधि होती है ।
ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
यह निम्न आउटपुट लौटाएगा:
ISODate("2012-10-15T21:26:17Z")
अधिक जानकारी यहाँ मैं एक Mongo ObjectID से बनाई गई तिथि को कैसे निकालूँ
updated_at
add जोड़ने के लिए दायर आपको इसका उपयोग करने की आवश्यकता है:
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();
});