2016-09-14 17 views
7

स्कीमा:MongoDB/नेवला अपडेट नहीं हो timestamps

var schema = new Schema({...}, { 
    timestamps: true, 
    id: false, 
    toJSON: { 
     virtuals: true, 
    }, 
    toObject: { 
     virtual: true, 
    } 
}); 
schema.virtual('updated').get(function() { 
    if(typeof this.updatedAt === "undefined" && typeof this.createdAt === "undefined") return ""; 
    var updated = (typeof this.updatedAt === "undefined") ? this.createdAt : this.updatedAt; 
    return "Updated "+moment(updated).fromNow(); 
}); 

इस कोड हाल ही में काम कर था - दस्तावेज़ के लिए एक विशेष उदाहरण के लिए updatedAt अप अगस्त 24 वें के रूप में आता है, तथापि किसी भी नए संपादन अद्यतन नहीं है टाइमस्टैम्प।

ऐसा लगता है कि मुझे यहां कुछ मूर्खतापूर्ण याद आ रही है।

var schema =new Schema({..}, 
      { timestamps: { createdAt: 'createdDate',updatedAt: 'updatedDate' } 
}); 

के लिए:

+0

क्या आप इसे टाइप कर सकते हैं .updatedAt? – abdulbarik

+0

@abdulbarik typeof league.updatedAt => ऑब्जेक्ट –

+0

मैंने कॉपी किया है और अपना सर्वर चिपकाया है, और यह mongoose 4.6.1 के साथ पूरी तरह से ठीक काम कर रहा है, तो हो सकता है कि आप कहीं और कुछ खो रहे हों। कृपया आप जिस मोंगोज़ संस्करण का उपयोग कर रहे हैं, या किसी भी मोंगोज़ प्लगइन का उल्लेख करें। –

उत्तर

0

आप String साथ object तुलना कर रहे हैं, यही वजह है कि हालत false हमेशा

schema.virtual('updated').get(function() { 
    if(typeof this.updatedAt === undefined && typeof this.createdAt === undefined) return ""; 
    var updated = (typeof this.updatedAt === undefined) ? this.createdAt : this.updatedAt; 
    return "Updated "+moment(updated).fromNow(); 
}); 

इस प्रयास करें, यह

+0

उत्तर के लिए धन्यवाद, लेकिन यह समस्या उस भाग के साथ प्रतीत नहीं होती है - यह समस्या अद्यतन के साथ अद्यतन नहीं है। –

+0

का मतलब है कि आपकी हालत ठीक काम कर रही है? – abdulbarik

+0

आप किस जगह पर फंस गए हैं? – abdulbarik

2

से कोशिश कर सकते हैं की तरह अपने स्कीमा को संशोधित काम करना चाहिए है यह स्कीमा timestmps save(), update() और findOneAndUpdate() पर अपडेट होगा । इसलिए कोई जरूरत schema.virtual('updated')...

प्रक्रिया-2

अपने स्कीमा में Date प्रकार के साथ createdDate और updatedDate जोड़ा गया है और इन तारीख स्कीमा प्लगइन का उपयोग कर खेतों को अपडेट करें।

की तरह:

schemaPlugin.js फ़ाइल में
var mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    SchemaPlugin = require('../helpers/schemaPlugin'); 
    var schema =new Schema({..}, 
    createdDate: { 
     type: Date, 
     default: Date.now 
    }, 
    updatedDate: { 
     type: Date, 
     default: Date.now 
    } 
    }); 

    schema.plugin(SchemaPlugin); 

:

module.exports = function(schema) { 

    var updateTimestemps = function(next){ 
    var self = this; 


    if(!self.createdAt) { 
     self.createdDate = new Date(); 
     //or self.update({},{ $set: { createdDate : new Date(), updatedDate: new Date() } }); 
    } else { 
     self.updatedDate= new Date(); 
     //or self.update({},{ $set: {updatedDate: new Date() } }); 
    } 
    next(); 
    }; 

    schema. 
    pre('save', updateTimestemps). 
    pre('update', updateTimestemps). 
    pre('findOneAndUpdate', updateTimestemps); 
}; 
1

updatedAt और createdAt दोनों एक ही समय पर बनाया एक नया दस्तावेज़ नेवला का उपयोग कर डेटाबेस में दर्ज किया गया है जब इतना की अपनी जाँच करें कि क्या updatedAt है अपरिभाषित या अजीब नहीं है क्योंकि नए दस्तावेज़ बनने पर दोनों के समान मूल्य होगा।

जब भी आप एक नेवला अद्यतन समारोह या mongochef या robomongo तरह findByIdAndUpdate या findOneAndUpdate updatedAt का मूल्य अपडेट कर दिया जाएगा automatically.Use MongoDB ग्राहक का उपयोग सीधे updatedAt के मान की जाँच करने के लिए।

संबंधित मुद्दे