对于 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 操作

Queries that use the $lookup operator might run slowly. To improve performance, we recommend that you use embedded models instead of the $lookup operator when possible. To learn more about how to reduce $lookup operations, see the Reduce $lookup Operations guide in the MongoDB Atlas documentation.

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

MongoDB功能
当前支持

搜索索引

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

  • numPartitions

  • analyzers

  • storedSource

  • synonyms

  • typeSets

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

Vector Search 搜索索引

Partially Supported. You can use Django MongoDB Backend to create basic Vector Search indexes that specify an index name, the fields to index, and a similarity function. All other index definition fields are unsupported.

复合索引

✓

嵌入式文档索引

✓

地理空间索引

✓

多键索引

✓

部分索引

✓

单字段索引

✓

Unique indexes

✓

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

不支持。

EmbeddedModelArrayField 索引

✓

PolymorphicEmbeddedModelField 和 PolymorphicEmbeddedModelArrayField 索引

不支持。

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

BSON 数据类型
当前支持

Object

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

Regular Expression

不支持。不过,我们计划在正式发布后的版本中支持这种类型。

MongoDB功能
当前支持

聚合操作

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

MongoDB 搜索查询

✓

删除操作

✓

地理空间查询

✓
使用 raw_aggregate() 方法运行地理空间查询,而不是 GIS QuerySet API。

插入操作

✓

读取操作

✓

更新操作

✓

MongoDB Vector Search 搜索查询

✓

MongoDB功能
当前支持

异步支持

✓

身份验证

✓

缓存数据存储

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

Change Streams

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

客户端字段级加密和Queryable 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 操作指南。

  • 在 ForeignKey字段上使用CASCADE deletes的性能不如使用 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()

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

difference()

不支持。

extra()

不支持。

intersection()

不支持。

模式匹配查找

✓
您只能使用这些查找来查询查询字符串字段。
模式匹配查找是 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

不支持。

Trunc

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

Django 功能
当前支持

Django Admin

✓

Django 身份验证

✓

GeoDjango

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

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 调试工具栏。