📜  猫鼬中的时间戳 (1)

📅  最后修改于: 2023-12-03 15:11:11.659000             🧑  作者: Mango

猫鼬中的时间戳

在猫鼬(Mongoose)中,时间戳是一个非常有用的功能,它可以在文档中自动记录创建和更新时间。这在许多应用程序中都是必需的。

使用时间戳

要在猫鼬中设置时间戳,需要在模式(Schema)中定义一个名为timestamps的属性,该属性的值为true。下面是示例代码:

const schema = mongoose.Schema({
  name: String,
  age: Number
}, { timestamps: true });

现在,每当新文档被创建或更新时,createdAtupdatedAt字段将自动填充。

{
  "_id": ObjectId("5fc6c5f7188a9e1bb0eeefca"),
  "name": "John",
  "age": 25,
  "createdAt": ISODate("2020-12-02T07:35:03.819Z"),
  "updatedAt": ISODate("2020-12-02T08:45:22.889Z")
}
自定义字段名

如果您想使用不同的字段名称来存储时间戳,则可以通过提供createdAtupdatedAt选项来自定义它们的名称。下面是示例代码:

const schema = mongoose.Schema({
  name: String,
  age: Number
}, {
  timestamps: {
    createdAt: 'created_at',
    updatedAt: 'updated_at'
  }
});

现在,文档将如下所示:

{
  "_id": ObjectId("5fc6c5f7188a9e1bb0eeefca"),
  "name": "John",
  "age": 25,
  "created_at": ISODate("2020-12-02T07:35:03.819Z"),
  "updated_at": ISODate("2020-12-02T08:45:22.889Z")
}
仅在插入文档时设置createdAt

有时您可能只想在创建文档时设置createdAt,而不是在每次更新时都设置。要做到这一点,您可以通过将updatedAt选项设置为false来禁用更新时的自动设置。下面是示例代码:

const schema = mongoose.Schema({
  name: String,
  age: Number
}, {
  timestamps: {
    createdAt: true,
    updatedAt: false
  }
});

这将导致只在插入文档时设置createdAt

{
  "_id": ObjectId("5fc6c5f7188a9e1bb0eeefca"),
  "name": "John",
  "age": 25,
  "createdAt": ISODate("2020-12-02T07:35:03.819Z")
}
仅在更新文档时设置updatedAt

同样,如果您只想在更新文档时设置updatedAt,则可以通过将createdAt选项设置为false来禁用创建时的自动设置。下面是示例代码:

const schema = mongoose.Schema({
  name: String,
  age: Number
}, {
  timestamps: {
    createdAt: false,
    updatedAt: true
  }
});

这将导致只在更新文档时设置updatedAt

{
  "_id": ObjectId("5fc6c5f7188a9e1bb0eeefca"),
  "name": "John",
  "age": 25,
  "updatedAt": ISODate("2020-12-02T08:45:22.889Z")
}
总结

在猫鼬中使用时间戳可以帮助您自动记录文档的创建和更新时间,这在很多应用程序中都是必须的。您可以轻松地自定义时间戳字段的名称,并选择在创建或更新文档时自动设置它们。