如何在插入时自动将服务器日期添加到文档中?
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 中自动插入当前日期