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

如何在PyMongo中自动生成created_at和updated_at字段?

在PyMongo中实现自动生成created_at和updated_at字段

PyMongo本身没有像Mongoose那样内置的timestamps快捷选项,但可以通过以下几种方式实现自动维护时间字段的需求:

1. 手动维护(简单场景首选)

在插入和更新文档时,直接手动设置时间字段:

插入文档

from datetime import datetime

# 插入时同时设置created_at和updated_at
doc = {
    "title": "示例文档",
    "content": "这是测试内容",
    "created_at": datetime.utcnow(),
    "updated_at": datetime.utcnow()
}
collection.insert_one(doc)

更新文档

# 更新时仅更新updated_at字段
collection.update_one(
    {"_id": target_id},
    {
        "$set": {
            "content": "更新后的内容",
            "updated_at": datetime.utcnow()
        }
    }
)

2. 封装工具函数(减少重复代码)

把时间字段的处理逻辑封装成函数,避免每次操作都重复写时间设置代码:

from datetime import datetime
from pymongo.collection import Collection

def insert_with_timestamps(collection: Collection, data: dict):
    current_time = datetime.utcnow()
    data["created_at"] = current_time
    data["updated_at"] = current_time
    return collection.insert_one(data)

def update_with_timestamps(collection: Collection, query: dict, update_data: dict):
    update_data["updated_at"] = datetime.utcnow()
    return collection.update_one(query, {"$set": update_data})

使用示例:

# 插入操作
insert_with_timestamps(collection, {"title": "封装测试", "content": "工具函数测试内容"})

# 更新操作
update_with_timestamps(collection, {"_id": doc_id}, {"content": "修改后的工具函数测试内容"})

3. MongoDB触发器(全局自动处理)

如果需要对集合的所有插入、更新操作自动维护时间字段,可以使用MongoDB的数据库触发器(适用于MongoDB Atlas集群,或自建集群需配置变更流):

  • 监听集合的insert事件:自动为新文档添加created_at和updated_at字段,值为当前UTC时间
  • 监听集合的update事件:自动将updated_at字段更新为当前UTC时间

注意:建议始终使用UTC时间(datetime.utcnow()),避免时区差异导致的时间不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:30:53