• Mongodb字段更新操作符$currentDate


    学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第54篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。

    本文基于Mongodb的官方文档,整理了Mongodb字段更新操作符$currentDate的定义,语法,行为和操作用例,以供参考。

    定义

    Mongodb支持使用操作符$currentDate更新字段为当前时间。默认更新成Date类型的时间。但也支持将字段更新成为timestamp. 当字段不存在时,向更新的文档中添加字段并更新成当前时间。

    语法

    数据库操作人员在UPDATE语句中,通过下面的语法将字段更新成当前时间

    {$currentDate: {<field1>: <typeSpecification1>, ...}}

    其中可以使用下面中的任意一种形式:

    • 使用布尔类型的true,将指定的字段设置为当前时间。
    • 指定当前时间类型的文档,{$type: "timestamp"}或{$type: "date"}.其中$type类型中指定的字符串是大小写敏感的,并且只接受小写类型的字符串。

    当指定的字段名称是嵌入式文档或位于数组当中时,需要使用点操作符('.')

    行为

    从mongodb5.0开始,更新操作的顺序按照文档字段名的字母表顺序执行。带有数字名称的字段,按照数字顺序更新。

    如下面的更新语句中, 字段"a.2"在"a.10"前更新。因为数字2排列在数字10前。

    {$set: { "a.2": <new value>, "a.10": <new value>}}

    使用$currentDate更新字段时 ,获取到的时间是$currentDate的执行时间。

    如果字段不存在 ,$currentDate向文档中添加该字段。

    mongodb 5.0版本以后,向$currentDate传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。

    应用举例

    创建一个customers集合并插入一条数据。

    1. db.customers.insertOne({
    2. _id: 1, status: "a", lastModified: ISODate("2013-10-02T01:11:18.965Z")
    3. })

    构建一条数据更新语句,要求添加cancellation文档字段,包含字段date和reason。其中,date字段是脚本执行时间。 修改字段status的值为"D"。同时将lastModified更新为脚本执行时间。

    1. db.customers.updateOne(
    2. {_id: 1},
    3. {
    4. $currentDate: {
    5. lastModified: true,
    6. "cancellation.date":{ $type: "timestamp"}
    7. },
    8. $set: {
    9. "cancellation.reason": "user request",
    10. status: "D"
    11. }
    12. }
    13. )

    查看更新结果

    1. db.customers.find()
    2. {
    3. "_id" : 1,
    4. "status" : "D",
    5. "lastModified" : ISODate("2024-04-01T15:57:28.663+08:00"),
    6. "cancellation" : {
    7. "date" : Timestamp(1711957959, 1),
    8. "reason" : "user request"
    9. }
    10. }

    自mongodb 4.2版本开始,也支持使用聚合操作来更新数据。其中CLUSTERTIME使

    NOW和$$CLUSTER_TIME在聚合管道中返回相同的时间戳。
    1. db.customers.updateOne(
    2. { _id: 1 },
    3. [
    4. {$set: {lastModified: "$$NOW", cancellation: {date: "$$CLUSTER_TIME", reason: "user request"}, status: "D"}}
    5. ]
    6. )

  • 相关阅读:
    Frida 脚本抓取 HttpURLConnection 请求和响应
    在linux操作系统ubuntu上安装ssh服务器和samba服务器教程,实现共享编译服务
    New Coins
    极客日报:中国团队拿下EDA全球冠军;黄金版iPad mini 6售价54万;微软Bing推出网购全新功能
    盘点54个Python实用工具源码Python爱好者不容错过
    DDR模块电路的PCB设计建议
    Dubbo之参数配置(一)
    【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
    嵌入式学习日记 27
    Python接口自动化封装导出excel方法和读写excel数据
  • 原文地址:https://blog.csdn.net/wilsonzane/article/details/137238390