对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Django 和MongoDB功能兼容性

在此页面上,您可以找到有关 Django MongoDB后端支持和不支持的功能的信息。您还可以找到当前计划在未来版本中提供的功能。我们将根据用户需求对这些即将推出的功能进行优先级排序,您可以通过创建 Jira 问题请求对功能的支持。

Django MongoDB后端支持以下操作,但性能可能较低:

操作
性能说明

$expr 操作

使用 $expr 操作符的查询可能会运行缓慢,因为此操作符通常无法预测要使用哪个索引并执行集合扫描。某些 QuerySet 操作(例如指定 in 查询的查询)使用 $expr 评估查询结果并导致性能下降。
我们计划在后 GA 版本中解决此性能问题。

$lookup 操作

使用$lookup 操作符的查询可能运行缓慢。为了提高性能,我们建议您尽可能使用嵌入式模型而不是 $lookup操作符。要学习;了解有关如何减少$lookup 操作的更多信息,请参阅MongoDB Atlas文档中的减少 $lookup 操作指南。

本部分指示 Django MongoDB后端是否支持各种MongoDB功能。

MongoDB功能
当前支持

搜索索引

部分支持。以下高级 索引定义字段 不受支持:

  • numPartitions

  • analyzers

  • storedSource

  • synonyms

  • typeSets

MongoDB不支持某些数据类型的搜索索引。要查看不支持的类型列表,请参阅MongoDB Atlas文档中的数据类型限制。

Vector Search 搜索索引

部分支持。您可以使用 Django MongoDB 后端 创建基本的向量搜索索引,可以指定索引名称、要索引的字段和相似度函数。所有其他 索引定义字段 均不受支持。

复合索引

✓

嵌入式文档索引

✓

地理空间索引

✓

多键索引

✓

部分索引

✓

单字段索引

✓

Unique indexes

✓

创建模型后更新嵌入式模型索引

不支持。

EmbeddedModelArrayField 索引

✓

PolymorphicEmbeddedModelField 和 PolymorphicEmbeddedModelArrayField 索引

✓

Django MongoDB后端当前支持下表中未包含的所有MongoDB数据类型。要查看支持类型的完整列表,请参阅MongoDB BSON字段部分,位于创建模型以表示集合指南中。

BSON 数据类型
当前支持

Object

✓
您可以使用嵌入式模型和多态嵌入式模型来表示对象。如果您使用 EmbeddedModelField 字段,则应用以下限制:
* 不支持外键字段。
* 不支持任意或无类型的嵌入式模型字段。您必须从 EmbeddedModel 类衍生所有字段。

MongoDB功能
当前支持

聚合操作

部分支持。Django MongoDB后端不包括MongoDB聚合框架的自定义 Django字段查找,但您可以使用 raw_aggregate() 方法。

MongoDB 搜索查询

✓

删除操作

✓

地理空间查询

✓
您可以使用 GIS QuerySet API中的以下空间查找:
*contains
*disjoint
*distance_gt
*distance_lte
*dwithin
*intersects
*within

对于其他地理空间查询,请使用raw_aggregate () 方法。

插入操作

✓

读取操作

✓

更新操作

✓

MongoDB Vector Search 搜索查询

✓

MongoDB功能
当前支持

异步支持

✓

身份验证

✓

缓存数据存储

不支持。不过,我们计划在正式发布后的版本中添加对此功能的支持。

Change Streams

不支持。不过,我们计划在正式发布后的版本中添加对此功能的支持。

客户端字段级加密 (Client-Side Field Level Encryption)

不支持。

集合交互

✓

数据库交互

✓

GridFS

不支持。不过,我们计划在正式发布后的版本中添加对此功能的支持。

一个集合有多个模型

不支持。

可查询加密

✓

表示文档

✓
使用模型表示 MongoDB 文档。

模式验证

不支持。不过,我们计划在正式发布后的版本中添加对此功能的支持。

时间序列数据

✓

事务

✓
您可以使用 Django MongoDB 后端的自定义事务 API,但受到以下限制:
* 事务中不支持 QuerySet.union()。
* 不支持保存点或嵌套式原子块。最外层原子块启动事务,任何后续原子块都无效。
* MongoDB 部署必须是副本集或分片集群。

本部分指示 Django MongoDB后端是否支持各种 Django 功能。

Django MongoDB后端目前支持下表中未包含的所有 Django 字段。要查看支持字段的完整列表,请参阅“创建模型”指南的 Django 字段 部分。

Django 字段类型
当前支持

AutoField

不支持。也不支持 BigAutoField 和 SmallAutoField 类型。请改用 ObjectIdAutoField。

CompositePrimaryKey

不支持。

DateTimeField

✓
不支持 DateTimeField 值的微秒粒度。

DurationField

✓
DurationField 存储毫秒而不是微秒。

ForeignKey

部分支持。您可以使用此字段类型,但有以下限制:

  • 如果可能,应使用 EmbeddedModelField 而不是 ForeignKey字段,以避免使用 $lookup 操作。 EmbeddedModelField 模拟MongoDB嵌入式文档,其性能优于 ForeignKey字段。 要学习;了解有关如何减少$lookup 操作的更多信息,请参阅Atlas文档中的减少 $lookup 操作指南。

  • 在 字段上使用 CASCADE deletesForeignKey的性能不如使用 时的性能。EmbeddedModelField

GeneratedField

不支持。

JSONField

部分支持。您可以使用此字段类型,但有以下限制:

  • Django MongoDB后端无法区分JSON和SQL null 值。 使用 Value(None, JSONField()) 或 isnull 查找的查询会同时返回JSON和SQL null 值。

  • 某些使用 Q 对象的查询(例如 Q(value__foo="bar"))可能无法按预期运行。

  • 筛选 None 值会错误地返回其中不存在字段的对象。

Django MongoDB后端目前支持下表中未包含的所有 Django QuerySet 方法。要查看支持的方法,请参阅 Django 文档中的QuerySet API。

Django QuerySet 功能
当前支持

delete()

✓
您不能使用此方法执行跨多个集合的查询。

extra()

不支持。

模式匹配查找

✓
您只能使用这些查找来查询查询字符串字段。
模式匹配查找是 iexact、startswith、istartswith、endswith、iendswith、contains、icontains、regex 和 iregex

prefetch_related()

不支持。

raw()

不支持。但是,您可以使用 raw_aggregate() 方法来运行使用 MongoDB聚合管道语法的查询。

select_for_update()

不支持。

update()

✓
您不能使用此方法执行跨多个集合的查询。

Django MongoDB后端当前支持下表中未包含的所有数据库函数。要查看函数的完整列表,请参阅 Django 文档中的数据库函数。

Django 函数
当前支持

Chr

不支持。

ExtractQuarter

不支持。

MD5

不支持。

Ord

不支持。

Pad

不支持。

Repeat

不支持。

Reverse

不支持。

Right

不支持。

SHA1, SHA224 , SHA256 , SHA384 , SHA512

不支持。

Sign

不支持。

StringAgg

不支持。

Trunc

部分支持。tzinfo 参数的 TruncDate 和 TruncTime 数据库函数不受支持。

Django 功能
当前支持

Django Admin

✓

Django 身份验证

✓

GeoDjango

部分支持。此 Web框架受支持但有以下限制:

  • 不支持 GIS 聚合函数和地理数据库函数。

  • MongoDB 不支持 4326. 以外的任何空间参考系统标识符。

  • RasterField 不受支持。

Django MongoDB后端支持 Django 表单,但 PolymorphicEmbeddedModelField 和 PolymorphicEmbeddedModelArrayField 不会出现在表单中。

Django MongoDB后端当前支持下表中未包含的所有管理命令。要查看命令的完整列表,请参阅 Django 文档中的可用命令。

Django 命令
当前支持

createcachetable

不支持。

dumpdata

不支持。不过,我们计划在正式发布后的版本中添加对此功能的支持。

inspectdb

不支持。不过,我们计划在正式发布后的版本中添加对此功能的支持。

loaddata

不支持。不过,我们计划在正式发布后的版本中添加对此功能的支持。

Django 功能
当前支持

通过迁移命令创建、删除和更新索引

部分支持。您无法更新嵌入式模型或大量字段上的索引。

不支持。

migrate --fake-initial 选项

不支持。

嵌入式模型的迁移

部分支持。迁移命令不会检测对 PolymorphicEmbeddedModelField 或 PolymorphicEmbeddedModelArrayField 引用的嵌入式模型字段或嵌入式模型的更改。

库
当前支持

部分支持。要学习;了解有关此库的使用案例和限制的更多信息,请参阅 Django MongoDB CLI文档中的 Django过滤。

部分支持。要学习;了解有关此库的使用案例和限制的更多信息,请参阅 Django MongoDB CLI文档中的 Django Rest框架。

部分支持。要学习;了解有关此库的使用案例和限制的更多信息,请参阅 Django MongoDB CLI文档中的 Django allauth。

部分支持。要学习;了解有关此库的使用案例和限制的更多信息,请参阅 Django MongoDB CLI文档中的 Django 调试工具栏。