使用 new Date() 使用 createdAt 变量定义 Mongoose Schema 不起作用

Defining Mongoose Schema with createdAt variable using new Date() doesnt work

我是 MERN 堆栈的新手,在我的服务器端我创建了一个 createRecord 函数,如下所示:

export const createRecord = async (req, res) => {
   const { person_name, person_position, person_level } = req.body;
   const newRecordItem = new RecordItem({
    person_name,
    person_position,
    person_level,
  });

据我了解,newRecordItem 创建了一个 RecordItem 对象,它是一个猫鼬模型,如下所示:

const itemSchema = mongoose.Schema({
  person_name: String,
  person_position: String,
  person_level: String,
  createdAt: {
    type: Date,
    default: new Date(), //this only returns one specific time which is server start time
  },
});

var RecordItem = mongoose.model("recorditem", itemSchema);

在这个结构中,当我创建一个新记录时,它的 created_At 变量总是 returns 当服务器为新创建的记录启动时而不是实际创建时。

example

我对此的解决方案,只需在 createRecord 函数中发送日期值并删除架构中的默认日期值。但是为什么模式在上面的第一个结构中只有 returns 一次值。

这按预期工作:

export const createRecord = async (req, res) => {
  const { person_name, person_position, person_level } = req.body;
  const createdAt = new Date();

  const newRecordItem = new RecordItem({
    person_name,
    person_position,
    person_level,
    createdAt,
  });

架构:

const itemSchema = mongoose.Schema({
  person_name: String,
  person_position: String,
  person_level: String,
  createdAt: Date,
});

定义字段后,尝试在架构中使用 timestamps

const itemSchema = mongoose.Schema({
  person_name: String,
  person_position: String,
  person_level: String,
},{timestamps:true});

var RecordItem = mongoose.model("recorditem", itemSchema);

有几种方法可以保护 createdAt

  1. 时间戳:选项为真
  2. createdAt: { type: Date, default: Date.now },
  3. itemSchema.pre('save', 函数(下一步) { 如果(!this.createdAt){ this.createdAt = 新日期(); } 下一个(); });