我正在执行从MS SQL到MongoDB的数据迁移。我使用mongoose,并在我的模式中将timestamp属性设置为true。
{ timestamps: true }
然后我尝试设置createdAt和updatedAt字段的值。当插入一条记录时,createdAt字段正确保存,但是updatedAt字段被设置为createdAt字段的值。这是标准行为还是我做错了什么?
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);
oknrviil2#
在迁移过程中,当您在新记录上设置时间戳时,请将timestamps: false选项与save()或create()沿着传递。
timestamps: false
save()
create()
await newRecord.save({timestamps: false});
这将覆盖此特定保存的模型上的timestamps: true设置,允许您使用旧数据中的时间戳而不受干扰。从该选件的文档中:[options.timestamps=true] Boolean如果为false且时间戳已启用,则跳过此保存()的时间戳。
timestamps: true
2条答案
按热度按时间mzsu5hc01#
时间戳选项确实很酷,毫无疑问,但我仍然在做它“老学校”:
oknrviil2#
在迁移过程中,当您在新记录上设置时间戳时,请将
timestamps: false
选项与save()
或create()
沿着传递。这将覆盖此特定保存的模型上的
timestamps: true
设置,允许您使用旧数据中的时间戳而不受干扰。从该选件的文档中:
[options.timestamps=true] Boolean如果为false且时间戳已启用,则跳过此保存()的时间戳。