Mongoose 中的时间戳使用
Mongoose 模式有一个 timestamps
选项 告诉 Mongoose 自动管理的 createdAt
和 updatedAt
文件上的属性。 例如以下是如何在 User
模型。
const userSchema = mongoose.Schema(
{
email: String,
},
{ timestamps: true }
);
const User = mongoose.model("User", userSchema);
const doc = await User.create({ email: "test@google.com" });
doc.createdAt; // 2020-07-06T20:36:59.414Z
doc.updatedAt; // 2020-07-06T20:36:59.414Z
doc.createdAt instanceof Date; // true
当您启用时间戳时,Mongoose 会添加 createdAt
和 updatedAt
属性到您的架构。 默认, createdAt
和 updatedAt
是类型 Date
. 当您 更新文档 时,Mongoose 会自动递增 updatedAt
.
doc.email = "sergey@google.com";
await doc.save();
doc.createdAt; // 2020-07-06T20:36:59.414Z
doc.updatedAt; // 2020-07-06T20:37:09.071Z
特定的猫鼬模型写入操作 允许您跳过时间戳,前提是 timestamps
在架构中设置。 为此,您必须设置 timestamps
至 false
并且该操作不会更新时间。
const userSchema = mongoose.Schema({
email: String
}, { timestamps: true });
const User = mongoose.model('User', userSchema);
const doc = await User.findOneAndUpdate({email: 'test@google.com'}, {email:'newtest@google.com'},
{new:true, upsert: true, timestamps:false});
如果您只想阻止其中一个更新,而不是将时间戳设置为 false
作为值,使用键值对创建一个对象。 关键是 createdAt
和/或 updatedAt
并且值是 true
或者 false
取决于你需要什么。
const userSchema = mongoose.Schema({
email: String
}, { timestamps: true });
const User = mongoose.model('User', userSchema);
const doc = await User.findOneAndUpdate({email: 'test@google.com'}, {email:'newtest@google.com'},
{new:true, upsert: true, timestamps:{createdAt:false, updatedAt:true}});
备用属性名称
默认情况下,Mongoose 使用 createdAt
和 updatedAt
作为时间戳的属性名称。 但是你可以让 Mongoose 使用你喜欢的任何属性名称。 例如,如果您更喜欢 snake_case
属性名称,你可以让 Mongoose 使用 created_at
和 updated_at
反而:
const opts = {
timestamps: {
createdAt: 'created_at',
updatedAt: 'updated_at'
}
};
const userSchema = mongoose.Schema({ email: String }, opts);
const User = mongoose.model('User', userSchema);
const doc = await User.create({ email: 'test@google.com' });
doc.updated_at; // 2020-07-06T20:38:52.917Z
带有 Unix 时间戳
尽管日期类型通常就足够了,但您也可以将 Mongoose 存储时间戳记为自 1970 年 1 月 1 日( Unix 纪元 )以来的秒数。 Mongoose 模式支持 timestamps.currentTime
允许您传递自定义函数以用于获取当前时间的选项。
const opts = {
// Make Mongoose use Unix time (seconds since Jan 1, 1970)
timestamps: { currentTime: () => Math.floor(Date.now() / 1000) },
};
const userSchema = mongoose.Schema(
{
email: String,
},
opts
);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 使用 Axios 发送请求
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论