如何在插入时自动将服务器日期添加到文档中?

Posted

技术标签:

【中文标题】如何在插入时自动将服务器日期添加到文档中?【英文标题】:How to automatically add server date to a document on insert? 【发布时间】:2021-07-17 04:49:58 【问题描述】:

我正在使用 REST API (RESTHEART) 将新条目插入 MongoDB。我有一个 JSON 要插入


    "name": "test"

当我插入该文档时,MongoDB 会自动为我的文档创建 _id 字段,这是一件好事。但我也希望 Mongo(或 restheart)自动创建一个带有当前服务器时间戳的字段“日期”。我如何实现这一目标?我不想在我的服务器上放置来自客户端的日期,也不想在“_id”字段中使用内置日期。我想让我的每个数据库条目都在插入时使用时间戳进行签名。奇怪的是,我还没有找到任何方法来完成这个简单的任务。这甚至可能吗?我真的不想从头开始编写自己的服务器,这样我的用户就可以将 JSON 文档发布到我的数据库中。我只能通过在我的发布请求中指定无效的 JSON 来插入服务器日期。


    "name": "test",
    "date": new Date()

这可行,但这显然是一个糟糕的解决方案。

【问题讨论】:

【参考方案1】:

如果您有一个唯一字段或字段组合(即,如果要插入的文档与集合中已有的文档不匹配),并且您使用的是 MongoDB 4.2+,则可以更新文档而不是插入,并使用$$NOW 运算符注入当前服务器时间。

db.collection.update(
     "name": "test" ,
    [$set: createdAt:"$$NOW"],
    upsert: true
)

使用我的本地集群进行测试,插入的文档如下所示:


    "_id" : ObjectId("60820c671de6b9f1d245f63e"),
    "name" : "test",
    "createdAt" : ISODate("2021-04-22T23:53:10.721Z")

【讨论】:

以上是关于如何在插入时自动将服务器日期添加到文档中?的主要内容,如果未能解决你的问题,请参考以下文章

添加新行时自动插入日期戳

如何使用 Java / Hibernate 在 SQL 中自动插入当前日期

word中如何取消日期自动更正

在EXCEL中插入日历控件后,如何添加到单元格上(带下拉箭头),点击后出现日历,选择一个日期自动填充并隐

如何在插入时自动将日期设置为当前日期

怎么样才能让word文档里的时间自动更新呢?