You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB(pymongo)中仅在文档修改时设置更新时间戳?

仅在文档实际修改时同步更新update_at字段

假设你执行以下MongoDB更新操作:

my_collection.update_one({...}, {
  "$set": { "title": "Title 1" }
})

需要实现:仅当文档确实被修改(即modified_count > 0)时,在同一请求中自动添加或更新update_at字段为当前日期。

解决方案

利用MongoDB 4.2+支持的聚合管道式更新,通过条件判断字段是否发生变化,就能在同一原子操作中实现需求:

my_collection.update_one(
    {...},  # 你的文档查询匹配条件
    [
        {
            "$set": {
                "title": "Title 1",
                "update_at": {
                    "$cond": [
                        # 判断原title值与新值是否不同
                        {"$ne": ["$title", "Title 1"]},
                        # 不同则设置为当前日期
                        {"$currentDate": {"$type": "date"}},
                        # 相同则保留原update_at值(无此字段时不新增)
                        "$update_at"
                    ]
                }
            }
        }
    ]
)

原理说明

  • 聚合管道式更新允许在更新逻辑中使用聚合表达式做条件判断,替代传统的键值对更新文档
  • $cond表达式会检查原文档的title是否等于新设置的"Title 1":
    • 若不等,说明title会被修改,此时$currentDate会生成当前UTC日期赋值给update_at
    • 若相等,说明title无变化,modified_count会返回0,此时update_at字段保持原有值(不存在则不创建)
  • 整个操作是原子性的,完全在单个update_one请求中完成,无需额外的二次请求判断

内容的提问来源于stack exchange,提问作者Alex Burla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:35:05