📅  最后修改于: 2023-12-03 15:11:11.659000             🧑  作者: Mango
在猫鼬(Mongoose)中,时间戳是一个非常有用的功能,它可以在文档中自动记录创建和更新时间。这在许多应用程序中都是必需的。
要在猫鼬中设置时间戳,需要在模式(Schema)中定义一个名为timestamps
的属性,该属性的值为true
。下面是示例代码:
const schema = mongoose.Schema({
name: String,
age: Number
}, { timestamps: true });
现在,每当新文档被创建或更新时,createdAt
和updatedAt
字段将自动填充。
{
"_id": ObjectId("5fc6c5f7188a9e1bb0eeefca"),
"name": "John",
"age": 25,
"createdAt": ISODate("2020-12-02T07:35:03.819Z"),
"updatedAt": ISODate("2020-12-02T08:45:22.889Z")
}
如果您想使用不同的字段名称来存储时间戳,则可以通过提供createdAt
和updatedAt
选项来自定义它们的名称。下面是示例代码:
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
,而不是在每次更新时都设置。要做到这一点,您可以通过将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
,则可以通过将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")
}
在猫鼬中使用时间戳可以帮助您自动记录文档的创建和更新时间,这在很多应用程序中都是必须的。您可以轻松地自定义时间戳字段的名称,并选择在创建或更新文档时自动设置它们。