Я определил эту схемуОбновлено поле даты не обновляется
var docSchema = mongoose.Schema({
name:{type:String,required:true},
}, { timestamps: { createdAt: 'createdAt',updatedAt:'updatedAt' }, collection : 'docs', discriminatorKey : '_type' });
Я обновить документы, используя этот маршрут
router.post('/:id', auth, function(req,res,next) {
var id = req.params.id;
docA.findByIdAndUpdate(id, req.body, {new: true}, function(err, doc) {
if(err)
res.json(err);
else if(doc==null)
res.status(404).send({
message: "Document not found"
});
else
res.json(doc);
});
});
Я заметил, updatedAt
не обновляется при сохранении некоторых изменений в документы. Помимо этой проблемы, думая об этом, это может быть полезно, чтобы сохранить эти данные в виде массива обновленной даты, как:
updatedAt : [
"2016-10-25T12:52:44.967Z",
"2016-11-10T12:52:44.967Z",
"2016-12-01T12:52:44.967Z"
]
РЕШЕНИЕ (?): Согласно @chridam предложений, моему текущему обходному пути сохранить массив обновления дат:
docSchema.pre(`findOneAndUpdate`, function(next) {
if(!this._update.updateHistory) {
console.log("findOneAndUpdate hook: updateHistory not present")
this._update.updateHistory=[];
}
this._update.updateHistory.push(new Date);
return next();
});
docSchema.pre('save', function (next) {
if(!this.updateHistory) {
console.log("Save hook: updateHistory not present")
this.updateHistory=[];
}
this.updateHistory.push(new Date);
next();
});
Как вы можете видеть, я используйте дискриминаторKey, так что у меня есть несколько унаследованных моделей для 'doc':' docA', 'docB',' docC', 'docD' .. Возможно, предварительный кусок сохранения обеспечит такое же обходное решение? Тем не менее, он должен обрабатывать создание и редактирование. Я бы избегал тянуть тонны маршрутов. – alfredopacino
Да, крюк предварительного обновления звучит как идеальный маршрут для вас. Проверьте обновленный ответ. – chridam
, пожалуйста, проверьте мой отредактированный вопрос – alfredopacino