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

如何在Mongoengine类模型中以datetime作为属性名定义数据结构

实现方案

Mongoengine 内置的 MapField 专门适配键名动态、值结构统一的文档对象场景,完全匹配你提到的 bp_data 存储需求,代码实现如下:

1. 导入依赖

from mongoengine import Document, EmbeddedDocument
from mongoengine.fields import (
    StringField, IntField, DateTimeField, 
    MapField, EmbeddedDocumentField, DictField
)

2. 定义内嵌结构(对应 bp_data 下每个时间键的值结构)

先定义每个动态时间键对应的固定字段结构,如果你的业务中每个时间节点下的字段不固定,可以跳过这一步直接用 DictField 作为 MapField 的值类型。

class BpRecordItem(EmbeddedDocument):
    # 可根据实际业务字段调整,以下为血压数据常见字段示例
    systolic = IntField(required=True)  # 收缩压
    diastolic = IntField(required=True) # 舒张压
    heart_rate = IntField() # 心率
    note = StringField() # 备注

3. 定义主集合类

class HealthRecord(Document):
    # 外层其他业务字段示例,可自行调整
    user_id = StringField(required=True)
    create_time = DateTimeField(auto_now_add=True)
    # 核心动态字段bp_data:键为字符串格式的时间,值为上面定义的BpRecordItem结构
    bp_data = MapField(field=EmbeddedDocumentField(BpRecordItem))

    # 如果不需要校验每个时间键下的字段结构,也可以直接写为:
    # bp_data = MapField(field=DictField())

调用示例

# 新增数据示例
item1 = BpRecordItem(systolic=122, diastolic=78, heart_rate=70)
item2 = BpRecordItem(systolic=130, diastolic=82, heart_rate=75)
record = HealthRecord(
    user_id="u_001",
    bp_data={
        "2024-06-10 09:00:00": item1,
        "2024-06-10 18:30:00": item2
    }
)
record.save()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 11:24:03