Docs Menu

Limitations

On this page, you can find a list of features that Django MongoDB Backend does not support. Because Django MongoDB Backend is in active development, some features listed on this page might be considered for future releases based on user demand. You can request support for a feature by leaving a suggestion on the Drivers Feedback Forum.

The following database variables are not supported by Django MongoDB Backend:

  • ATOMIC_REQUESTS

  • AUTOCOMMIT

  • CONN_HEALTH_CHECKS

  • TIME_ZONE

The following limitations apply to models in Django MongoDB Backend:

  • Django MongoDB Backend enforces a one-to-one mapping between a Django model and a MongoDB collection. Because of this, multiple models cannot share the same collection.

Django MongoDB Backend does not support the following index functionalities:

  • Creating $vectorSearch and $search indexes through the Django Indexes API

  • Creating geospatial indexes through the Django Indexes API

  • Updating indexes in EmbeddedModelFields after model creation

To learn how to run unsupported database operations by operating directly on your MongoClient instance, see MongoClient Operations in the Perform Raw Database Queries guide.

Django MongoDB Backend has the following limitations on the specified field types:

  • ArrayField

    • Django MongoDB Backend does not support ArrayField polymorphism.

    • Django MongoDB Backend does not support nesting an EmbeddedModelField within an ArrayField.

  • EmbeddedModelField

    • EmbeddedModel schema changes do not register after creation.

    • Embedded documents cannot take Django foreign keys.

    • Django MongoDB Backend does not support arbitrary or untyped embedded model fields. You must derive all fields from a EmbeddedModel class.

  • JSONField

    • Django MongoDB Backend cannot distinguish between a JSON and a SQL null value. Queries that use Value(None, JSONField()) or the isnull lookup return both JSON and SQL null values.

    • Some queries with Q objects, such as Q(value__foo="bar"), might not work as expected.

    • Filtering for None values incorrectly returns objects in which a field does not exist.

  • DateTimeField

    • Django MongoDB Backend does not support microsecond granularity for DateTimeField.

  • DurationField

    • DurationField stores milliseconds rather than microseconds.

  • ForeignKey

    • When possible, you should use an EmbeddedModelField instead of a ForeignKey field to avoid using $lookup operations. An EmbeddedModelField emulates a MongoDB embedded document and performs better than a ForeignKey field. To learn more about how to reduce $lookup operations, see the Reduce $lookup Operations guide in the Atlas documentation.

    • Performance of CASCADE deletes on a ForeignKey field is not as performant as using an EmbeddedModelField.

The following field types are unavailable in Django MongoDB Backend:

  • GeneratedField

  • AutoField

  • BigAutoField

  • SmallAutoField

Django MongoDB Backend does not support the following QuerySet API methods:

  • distinct()

  • dates()

  • datetimes()

  • prefetch_related()

  • extra()

Django MongoDB Backend does not support QuerySet.delete() and update() queries that span multiple collections.

  • Django MongoDB Backend does not support GeoDjango.

  • Django MongoDB Backend does not have any Django lookup operators for MongoDB-specific geospatial queries.

Django MongoDB Backend does not contain any custom Django field lookups for the MongoDB aggregation framework. Instead, use the raw_aggregate() method. For more information on the raw_aggregate() method, see the Perform Raw Database Queries guide.

Django MongoDB Backend does not support the following database functions:

  • Chr

  • ExtractQuarter

  • MD5

  • Now

  • Ord

  • Pad

  • Repeat

  • Reverse

  • Right

  • SHA1, SHA224, SHA256, SHA384, SHA512

  • Sign

The tzinfo parameter of the Trunc database functions doesn't work properly because MongoDB converts the result back to UTC.

Django MongoDB Backend does not support the following Django management commands:

  • createcachetable

  • inspectdb

  • optimizemigration

  • sqlflush

  • sqlsequencereset

  • Django MongoDB Backend does not support enforced schema validation. To learn how to enforce schema validation in your application, see the Specify JSON Schema Validation guide in the MongoDB Server manual.

  • Django MongoDB Backend does not support DDL Transactions.

  • Django MongoDB Backend does not support the migrate --fake-initial command.

Django MongoDB Backend has not been tested for support of the asynchronous functionality of the Django API.

Django MongoDB Backend does not have a custom Field class for the BSONRegExp data type. Instead, use the CharField class.

The engineering team is prioritizing feature development for the Public Preview release of Django MongoDB Backend. Because of this, you might notice performance limitations with certain workloads. If you encounter any performance issues, please report them as shown in the Issues & Help guide. You can also share your feedback on the Drivers Feedback Forum.