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

如何在MongoDB中创建指定JSON数据结构?基于Django+Djongo实现

Djongo实现MongoDB嵌套结构的正确方案

前置配置校验

确保Django项目settings.py中数据库配置的ENGINE字段已设置为djongo,且Djongo版本与当前Django版本兼容,推荐使用Djongo 1.3.6及以上版本。

模型定义步骤

1. 定义嵌入子模型

所有需要嵌套到其他文档的子模型,必须设置abstract = True的Meta属性,示例如下:

from djongo import models

# 内层嵌入子模型
class SubDocument(models.Model):
    # 按需自定义子字段
    sub_title = models.CharField(max_length=100)
    sub_count = models.IntegerField()
    sub_status = models.BooleanField(default=True)

    class Meta:
        abstract = True # 必加,标记为嵌入模型,不会生成独立集合

2. 定义主模型

根据结构需求,分别使用EmbeddedField存储单条嵌套文档,使用ArrayField嵌套EmbeddedField存储嵌套文档数组,示例如下:

class ParentDocument(models.Model):
    # 主文档基础字段
    title = models.CharField(max_length=200)
    create_time = models.DateTimeField(auto_now_add=True)

    # 单条嵌套文档字段
    single_sub = models.EmbeddedField(
        model_container=SubDocument,
        null=True, blank=True # 按需设置是否允许为空
    )

    # 嵌套文档数组字段
    sub_list = models.ArrayField(
        model_container=SubDocument,
        null=True, blank=True
    )

    # 基础类型数组字段(无需子模型)
    tag_list = models.ArrayField(
        models.CharField(max_length=50),
        default=list
    )

常见问题排查

  • 不要混用Django原生PostgreSQL的ArrayField,必须导入djongo.models.ArrayField
  • 嵌入子模型如果漏加abstract = True会导致结构生成失败,Djongo会尝试为子模型创建独立集合
  • 模型修改后必须执行python manage.py makemigrations和python manage.py migrate同步结构
  • 写入数据时,数组字段直接传入Python列表即可,嵌入字段直接传入子模型实例

数据写入示例

# 构造子文档实例
sub1 = SubDocument(sub_title="子项1", sub_count=10)
sub2 = SubDocument(sub_title="子项2", sub_count=20)

# 写入主文档
ParentDocument.objects.create(
    title="测试主文档",
    single_sub=sub1,
    sub_list=[sub1, sub2],
    tag_list=["测试", "MongoDB", "Djongo"]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:00:03