Overview
在此页面上,您可以找到 Django MongoDB后端不支持的功能列表。您还可以找到当前计划用于正式发布 (GA) 和发布后版本的功能。我们将根据用户需求对这些即将推出的功能进行优先级排序,您可以通过 创建 JIRA 问题 请求对某项功能的支持。
功能限制
在本节中,您可以学习;了解以下类型的不支持的 Django 和MongoDB功能:
事务管理
查询执行使用 Django 和 MongoDB 的默认行为 autocommit模式。每个查询都会立即提交到数据库。
不支持 Django 的ACID 事务管理API。
模型限制
Django 不支持MongoDB 的多态模式,在这种模式下,略有不同的模型股票相同的集合。
索引
Django MongoDB后端不支持以下索引功能:
通过 Django Indexes API创建
$vectorSearch
和$search
索引通过 Django Indexes API创建地理空间索引
创建模型后更新
EmbeddedModelFields
中的索引
字段
Django MongoDB后端对指定的字段类型有以下限制:
ArrayField
ArrayField
不支持多态性。不支持
ArrayField
中嵌套的EmbeddedModelField
值。
EmbeddedModelField
EmbeddedModel
模式更改在创建后不会注册。嵌入式文档不能使用 Django 外键。
不支持任意或无类型的嵌入式模型字段。您必须从
EmbeddedModel
类派生所有字段。
JSONField
Django MongoDB后端无法区分JSON和SQL
null
值。 使用Value(None, JSONField())
或isnull
查找的查询会同时返回JSON和SQLnull
值。某些使用
Q
对象的查询(例如Q(value__foo="bar")
)可能无法按预期运行。筛选
None
值会错误地返回其中不存在字段的对象。
DateTimeField
不支持
DateTimeField
值的微秒粒度。
DurationField
DurationField
存储毫秒而不是微秒。
ForeignKey
如果可能,应使用
EmbeddedModelField
而不是ForeignKey
字段,以避免使用$lookup
操作。EmbeddedModelField
模拟MongoDB嵌入式文档,其性能优于ForeignKey
字段。 要学习;了解有关如何减少$lookup
操作的更多信息,请参阅Atlas文档中的减少 $lookup 操作指南。在 字段上 CASCADE 删除的性能不如使用
ForeignKey
EmbeddedModelField
时的性能。
以下字段类型在 Django MongoDB后端中不可用:
GeneratedField
AutoField
(包括BigAutoField
和SmallAutoField
)
查询限制
Django MongoDB后端不支持以下 QuerySet
API方法:
prefetch_related()
extra()
Django MongoDB后端不支持跨越多个集合的 QuerySet.delete()
和 update()
查询。
地理空间查询
Django MongoDB后端不支持以下地理空间查询功能:
GeoDjango
用于特定于MongoDB 的地理空间查询的 Django 查找操作符
聚合操作符
Django MongoDB后端不包含MongoDB聚合框架的任何自定义 Django字段查找。请改用 raw_aggregate()
方法。请参阅执行原始数据库查询指南。
数据库函数
Django MongoDB后端不支持以下数据库功能:
不支持的管理命令
不支持以下 django-admin
命令:
createcachetable
(请参阅缓存)inspectdb
迁移限制
Django MongoDB后端不支持以下迁移功能:
强制模式验证。要学习;了解如何在应用程序中实施模式验证,请参阅MongoDB Server手册中的指定JSON schema验证指南。
migrate --fake-initial
选项。
缓存
数据库缓存使用 Django MongoDB后端的 createcachecollection
命令,而不是 Django 的特定于SQL的 createcachetable
命令。
其次,您必须使用 django_mongodb_backend.cache.MongoDBCache
后端,而不是 Django 的内置数据库缓存后端django.core.cache.backends.db.DatabaseCache
。
性能
工程团队正在优先开发 Django MongoDB后端公共预览发布的功能。因此,您可能会注意到某些工作负载存在性能限制。如果您遇到任何性能问题,请按照问题和帮助指南中的说明进行报告。
正式发布版本功能
在本节中,您可以学习;了解正式发布和正式发布后的 Django MongoDB后端版本可能会引入的以下类型的 Django 和MongoDB功能:
MongoDB功能
我们计划在 GA发布中支持以下MongoDB功能:
使用 Django API对 Vector Search、 Atlas Search和地理空间索引进行编程管理
使用 Django API进行 Vector Search、 Atlas Search和地理空间查询
Queryable Encryption和客户端字段级加密
数据库事务
我们计划在未来的正式发布后版本中支持以下MongoDB功能:
用于大文件存储的GridFS
用于数据监控的变更流
模式验证
提示
要学习;了解有关本节中提到的MongoDB功能的更多信息,请参阅以下资源:
MongoDB Server手册中的GridFS
MongoDB Server手册中的 Change Streams
模型特征
我们计划在 GA发布中支持以下模型功能:
嵌入式文档数组
多态嵌入式文档和数组
将对嵌入式模型模式的更改应用于
EmbeddedModelField
值集合中的多个模型
改进嵌入式模型中的表单表示
在未来的正式发布中,我们计划为 BSONRegExp
数据类型添加自定义模型字段。
管理命令功能
对 EmbeddedModelField
的序列化支持(即Django 的 dumpdata
和 loaddata
管理命令)将由 GA发布添加。
第三方库
我们计划在 GA发布之前测试与以下第三方库的兼容性: