如何在数据迁移过程中使用mongoose设置updatedAt时间戳

olqngx59  于 2022-12-13  发布在  Go
关注(0)|答案(2)|浏览(116)

我正在执行从MS SQL到MongoDB的数据迁移。我使用mongoose,并在我的模式中将timestamp属性设置为true。

{
  timestamps: true
}

然后我尝试设置createdAt和updatedAt字段的值。当插入一条记录时,createdAt字段正确保存,但是updatedAt字段被设置为createdAt字段的值。
这是标准行为还是我做错了什么?

mzsu5hc0

mzsu5hc01#

时间戳选项确实很酷,毫无疑问,但我仍然在做它“老学校”:

'use strict';
/**
 * Module dependencies
 */
const mongoose = require('mongoose');

var DataSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true, 
        lowercase: true
    }, 
    created: {
        type: Date,
        default: Date.now
    },
    updated: {
        type: Date,
        default: Date.now
    }
});

DataSchema.pre('save', function(next) {
    this.updated = Date.now();
    return next();
});

mongoose.model('Data', DataSchema);
oknrviil

oknrviil2#

在迁移过程中,当您在新记录上设置时间戳时,请将timestamps: false选项与save()create()沿着传递。

await newRecord.save({timestamps: false});

这将覆盖此特定保存的模型上的timestamps: true设置,允许您使用旧数据中的时间戳而不受干扰。
从该选件的文档中:
[options.timestamps=true] Boolean如果为false且时间戳已启用,则跳过此保存()的时间戳。

相关问题