2017-01-07 4 views
0

Mongoose, похоже, скрывает мое поле timestamp, когда я устанавливаю его в pre 'save' hook. Любая идея почему?Почему Mongoose скрывает мое поле?

У меня есть эта схема:

var dpsSchema = new Schema({ 
    timestamp: Date, 
    _loaded_schedules: [{type: Number, ref: 'prun_schedules'}] 
}) 

dpsSchema.pre('save', function(next){ 
    this.timestamp = new Date(); 
    next(); 
}) 

и я запускаю этот код:

var Dpm_model = mongoose.model('daily_production_meta', dpm_schema); 

var pm = new Dpm_model(); 
pm.save(); 

setTimeout(console.log(pm), 2000); 

Полученный лог консоли выглядит следующим образом:

{ _id: 5871410c08b91cfd82124656, 
    _loaded_schedules: [] } 

Но когда я вхожу в MongoDB через терминал и проверить этот документ, я вижу поле timestamp!

Почему?

+1

'.save()' работает асинхронно, поэтому, возможно, 2 секунды недостаточно. Попробуйте '.save(), затем (doc => console.log (doc);' Могу ли я спросить, почему вы используете эту временную метку? Если вы хотите сохранить, когда документ был создан или модифицирован, есть встроенная опция для этого: http://mongoosejs.com/docs/guide.html#timestamps – Camo

ответ

1

Проблема с вашим вызовом

pm.save(); 

Это асинхронный вызов, ожидая обратный вызов.

Измените это

pm.save(function(err){ 
    setTimeout(function(){console.log(pm)}, 2000); 
}); 

и он должен работать, как ожидалось.

+0

Я хотел бы добавить, что setTimeout действительно требует чего-то в строках 'setTimeout (function() {console.log (pm)} , 2000); 'для этого работать без использования обещания. – zedjay72

+0

вы правы, отредактированный ответ соответственно – Alex

Смежные вопросы