टाइमस्टैम्प के लिए मानगो में कौन सी स्कीम टाइप है?


86

मैं Mongoose, MongoDB, और Node का उपयोग कर रहा हूं।

मैं एक स्कीमा को परिभाषित करना चाहूंगा जहां इसका एक क्षेत्र एक तारीख \ _ टाइमस्टैम्प हो।

मैं पिछले 5 मिनट में अद्यतन किए गए सभी अभिलेखों को वापस करने के लिए इस क्षेत्र का उपयोग करना चाहूंगा।

इस तथ्य के कारण कि मैंगोज़ में मैं टाइमस्टैम्प () पद्धति का उपयोग नहीं कर सकता, मैं समझता हूं कि मेरा एकमात्र विकल्प निम्नलिखित जावास्क्रिप्ट विधि का उपयोग करना है:

time : { type: Number, default: (new Date()).getTime() } 

यह शायद एक विनम्र DB को क्वेरी करने का सबसे कुशल तरीका नहीं है। मैं वास्तव में इसकी सराहना करूंगा अगर कोई इसे लागू करने का अधिक कुशल तरीका साझा कर सके।

वहाँ किसी भी तरह से यह लागू करने के लिए है और MongoDB टाइमस्टैम्प का उपयोग करने में सक्षम है?

जवाबों:


139

संपादन - २० मार्च २०१६

Mongoose अब संग्रह के लिए टाइमस्टैम्प का समर्थन करता है ।

कृपया नीचे @bobbyz के उत्तर पर विचार करें । शायद यह वही है जो आप ढूंढ रहे हैं।

मूल उत्तर

Mongoose एक Dateप्रकार का समर्थन करता है (जो मूल रूप से टाइमस्टैम्प है):

time : { type : Date, default: Date.now }

उपरोक्त फ़ील्ड परिभाषा के साथ, किसी भी समय आप किसी दस्तावेज़ को किसी अनसेट के साथ सहेजते हैं time फ़ील्ड के , तो Mongoose वर्तमान समय में इस फ़ील्ड को भर देगा।

स्रोत: http://mongoosejs.com/docs/guide.html


उत्तर के लिए बहुत बहुत धन्यवाद, लेकिन जो मैं समझने की कोशिश कर रहा हूं वह पिछले 5 मिनट में अपडेट किए गए सभी रिकॉर्ड को वापस करने के लिए क्वेरी करने का सबसे अच्छा तरीका है। क्या आपका मतलब है कि मुझे उपयोग करना चाहिए: दिनांक: {$ gt: ((Math.round ((नई तिथि ())। getTime () / 1000)) - 300)}
Liatz

1
@ user1103897 आप सीधे एक तिथि ऑब्जेक्ट का निर्माण कर सकते हैं और इसे $ gt के साथ इस तरह उपयोग कर सकते हैं: var now = new Date (); var पाँचमिनगो = नई तिथि (अब .getTime () - ५ * ६० * १०००); उसके बाद {दिनांक: {$ gt: fiveminago}}
mpobrien

20
के Date.nowबजाय शायद होना चाहिए Date.now()
अलेक्सी ज़ाब्रोद्स्की

1
+1 एल्मिग्रेन्टो, मोंगोज़ डॉक्स उदाहरण Date.now mongoosejs.com/docs/guide.html
एरोन

21
स्पष्टीकरण: Date.nowक्योंकि Date.nowजब आप ऑब्जेक्ट बनाते हैं तो एक फ़ंक्शन होता है। Date.now()वह तारीख है जिसे आपके models.jsद्वारा पार्स किया गया था। यानी, यदि आप Date.now()अपनी सभी वस्तुओं का उपयोग करते हैं तो एक ही तारीख होगी, और वह तारीख होगी जिस दिन models.jsपार्स किया गया था।
मिकमस्काना

122

Mongoose के मौजूदा संस्करण (v4.x) में स्कीमा के लिए निर्मित विकल्प के रूप में समय का मोहर लगाना है:

var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );

यह विकल्प जोड़ता है createdAtऔर updatedAtगुण जो टाइमस्टैम्प के साथ हैं Date, और जो आपके लिए सभी काम करता है। जब भी आप दस्तावेज़ को अपडेट करते updatedAtहैं , यह संपत्ति को अपडेट करता है। स्कीमा टाइमस्टैम्प डॉक्स।


4
धन्यवाद, डॉक्स स्पष्ट नहीं थे कि कोई उपयोग timestamps: trueकरने वाले नामों को ओवरराइड करने के बजाय उपयोग कर सकता है timestamps: {...}
tar

2
@ अवतार मुझे लगता है कि यह अभी भी काम कर रहा है, लेकिन 4.x डॉक्स का विशेष रूप से उल्लेख करने के लिए उपयोग किया जाता है timestamps: true, इसलिए आगे बढ़ने के लिए कुछ अतिरिक्त विचारों की आवश्यकता हो सकती है। (शायद वे इसे
चित्रित

19

यदि आप अपने createAt और updatedAt के लिए कस्टम नाम चाहते हैं

const mongoose = require('mongoose');  
const { Schema } = mongoose;

const schemaOptions = {
  timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
};

const mySchema = new Schema({ name: String }, schemaOptions);

1
धन्यवाद!!! यह सुपर सहायक था। दस्तावेज़ीकरण खोज रहा था, लेकिन ऐसा नहीं कर पाया। साझा करने के लिए फिर से धन्यवाद।
ग्रेग


0

मैं पिछले 5 मिनट में अपडेट किए गए सभी रिकॉर्ड वापस करने के लिए इस क्षेत्र का उपयोग करना चाहूंगा।

इसका मतलब है कि आपको हर बार ऑब्जेक्ट को सहेजने के लिए तारीख को "अब" अपडेट करना होगा। हो सकता है कि आपको यह उपयोगी लगे: Moongoose create-संशोधित प्लगइन


-3

प्रथम : npm install mongoose-timestamp

आगे: let Timestamps = require('mongoose-timestamp')

आगे: let MySchema = new Schema

आगे: MySchema.plugin(Timestamps)

आगे : const Collection = mongoose.model('Collection',MySchema)

तब आप अपनी इच्छानुसार Collection.createdAtया Collection.updatedAtकहीं भी उपयोग कर सकते हैं।

इस पर बनाया गया: द वीक मंथ की तारीख साल 00:00:00 GMT

समय इस प्रारूप में है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.