Mongoose 中的时间戳使用

发布于 2022-11-06 22:14:51 字数 3217 浏览 170 评论 0

Mongoose 模式有一个 timestamps 选项 告诉 Mongoose 自动管理的 createdAtupdatedAt 文件上的属性。 例如以下是如何在 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 会添加 createdAtupdatedAt 属性到您的架构。 默认, createdAtupdatedAt 是类型 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 在架构中设置。 为此,您必须设置 timestampsfalse 并且该操作不会更新时间。

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 使用 createdAtupdatedAt 作为时间戳的属性名称。 但是你可以让 Mongoose 使用你喜欢的任何属性名称。 例如,如果您更喜欢 snake_case 属性名称,你可以让 Mongoose 使用 created_atupdated_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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

落花浅忆

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

eins

文章 0 评论 0

世界等同你

文章 0 评论 0

毒初莱肆砂笔

文章 0 评论 0

初雪

文章 0 评论 0

miao

文章 0 评论 0

qq_zQQHIW

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文