Skip to content

DOCSP-46329 Add Limitations page #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

jordan-smith721
Copy link
Collaborator

@jordan-smith721 jordan-smith721 commented Jan 23, 2025

Pull Request Info

PR Reviewing Guidelines

JIRA - https://jira.mongodb.org/browse/DOCSP-46329

Staging Links

https://deploy-preview-12--docs-django.netlify.app/limitations/

Self-Review Checklist

  • Is this free of any warnings or errors in the RST?
  • Did you run a spell-check?
  • Did you run a grammar-check?
  • Are all the links working?
  • Are the facets and meta keywords accurate?

Copy link

netlify bot commented Jan 23, 2025

Deploy Preview for docs-django ready!

Name Link
🔨 Latest commit 8819421
🔍 Latest deploy log https://app.netlify.com/sites/docs-django/deploys/679cd88421489c00080d4bf9
😎 Deploy Preview https://deploy-preview-12--docs-django.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link
Collaborator

@Jibola Jibola left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! Added in minor corrections.


- ``EmbeddedModelField``

- You cannot change embedded models after creation.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- You cannot change embedded models after creation.
- EmbeddedModel schema changes do not register after creation.

- You cannot change embedded models after creation.
- Embedded documents cannot take Django foreign keys.
- {+django-odm+} does not support arbitrary or untyped embedded model
fields. You must derive all fields from a ``Model`` class.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
fields. You must derive all fields from a ``Model`` class.
fields. You must derive all fields from a ``EmbeddedModel`` class.

Comment on lines 89 to 107
- The ``DurationField`` stores milliseconds rather than microseconds.

The following field types are unavailable in {+django-odm+}:

- ``GeneratedField``
- ``ImageField``

- ``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 :atlas:`Reduce $lookup Operations
</schema-suggestions/reduce-lookup-operations/>` guide in the Atlas
documentation.
- The performance of `CASCADE deletes <{+django-docs+}/ref/models/fields/#foreignkey>`__
on a ``ForeignKey`` field is not as performant as using an
``EmbeddedModelField``.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- The ``DurationField`` stores milliseconds rather than microseconds.
The following field types are unavailable in {+django-odm+}:
- ``GeneratedField``
- ``ImageField``
- ``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 :atlas:`Reduce $lookup Operations
</schema-suggestions/reduce-lookup-operations/>` guide in the Atlas
documentation.
- The performance of `CASCADE deletes <{+django-docs+}/ref/models/fields/#foreignkey>`__
on a ``ForeignKey`` field is not as performant as using an
``EmbeddedModelField``.
- The ``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 :atlas:`Reduce $lookup Operations
</schema-suggestions/reduce-lookup-operations/>` guide in the Atlas
documentation.
- The performance of `CASCADE deletes <{+django-docs+}/ref/models/fields/#foreignkey>`__
on a ``ForeignKey`` field is not as performant as using an
``EmbeddedModelField``.
The following field types are unavailable in {+django-odm+}:
- ``GeneratedField``
- ``ImageField``

This needs to be moved to above the "The following field types are unavailable..." - JSONField has its own section.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Jibola do we want to add a line around lack of support for Embeddedfield in Array. If their data is of this type they should use Join for now until we release the support for embeddedfield in array?

~~~~~~~~~~~~~~~~~~

- {+django-odm+} does not support ``GeoDjango``.
- {+django-odm+} does not have any ``$lookup`` operators for MongoDB-specific
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- {+django-odm+} does not have any ``$lookup`` operators for MongoDB-specific
- {+django-odm+} does not have any Django lookup operators for MongoDB-specific

On this page, you can find a list of features that
{+django-odm+} does not support. Because {+django-odm+} is in active
development, some features listed on this page might be considered for future
releases based on customer demand.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would replace customer with "user" or any similar word to indicate it's not just paying customer.

- Creation of ``$vectorSearch`` and ``$search`` indexes through the Django
Indexes API
- Creating geospatial indexes through the Django Indexes API
- Updating indexes in ``EmbeddedModelFields`` after model creation
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we link to the page where we cover exposing mongoclient so that people know the workaround? @Jibola

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that's in the "Raw Queries" section


The following model limitations apply to {+django-odm+}:

- {+django-odm+} does not support multiple models within a collection.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Jibola @jordan-smith721 How about something like this?

Currently, the integration enforces a one-to-one mapping between a Django model and a MongoDB collection, meaning multiple models cannot share the same collection.

Comment on lines 89 to 107
- The ``DurationField`` stores milliseconds rather than microseconds.

The following field types are unavailable in {+django-odm+}:

- ``GeneratedField``
- ``ImageField``

- ``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 :atlas:`Reduce $lookup Operations
</schema-suggestions/reduce-lookup-operations/>` guide in the Atlas
documentation.
- The performance of `CASCADE deletes <{+django-docs+}/ref/models/fields/#foreignkey>`__
on a ``ForeignKey`` field is not as performant as using an
``EmbeddedModelField``.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Jibola do we want to add a line around lack of support for Embeddedfield in Array. If their data is of this type they should use Join for now until we release the support for embeddedfield in array?

============
Limitations
============

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jordan-smith721 we should probably add a link here that if you a user wants us to support any specific feature listed here. They should let us know through our feedback portal: https://feedback.mongodb.com/forums/924286-drivers?category_id=370732 They can also vote on existing requested feature if it is relevant to them.

Performance
-----------

The engineering team is prioritizing performance improvements prior to the
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Jibola @jordan-smith721 How does this sound?

Since this release is a Public Preview, our primary focus has been on feature development rather than performance optimizations. You may or may not notice performance limitations with certain workloads. If you encounter any performance issues, please file a ticket or share your feedback https://feedback.mongodb.com/forums/924286-drivers?category_id=370732.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Jibola @jordan-smith721 Are we not covering MongoDB feature limitations here?

Comment on lines 58 to 59
To learn how to run unsupported database operations by operating directly on
your ``MongoClient`` instance, see the :ref:`django-client-operations` guide.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: This link will work once the PR is merged in

Copy link
Collaborator

@norareidy norareidy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great, thank you for picking this up! left a few suggestions / questions


{+django-odm+} does not support the following index functionalities:

- Creation of ``$vectorSearch`` and ``$search`` indexes through the Django
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: to match the verb tense of the other list items:

Suggested change
- Creation of ``$vectorSearch`` and ``$search`` indexes through the Django
- Creating ``$vectorSearch`` and ``$search`` indexes through the Django

- Updating indexes in ``EmbeddedModelFields`` after model creation

To learn how to run unsupported database operations by operating directly on
your ``MongoClient`` instance, see the :ref:`django-client-operations` guide.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: since this is a section in the Raw Queries guide

Suggested change
your ``MongoClient`` instance, see the :ref:`django-client-operations` guide.
your ``MongoClient`` instance, see :ref:`django-client-operations` in the Perform Raw Database Queries guide.


Indexes
~~~~~~~

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q: should we also mention that expression indexes aren't supported? @Jibola

- ``ArrayField``

- {+django-odm+} does not support ``ArrayField`` polymorphism.
- {+django-odm+} does not support ``EmbeddedModelField`` within an ``ArrayField``.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: a little clearer

Suggested change
- {+django-odm+} does not support ``EmbeddedModelField`` within an ``ArrayField``.
- {+django-odm+} does not support nesting an ``EmbeddedModelField`` within an ``ArrayField``.

Comment on lines 85 to 86
- Filtering with a ``None`` key incorrectly returns objects in which a key
does not exist.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: I think using field/value mongodb terminology makes more sense, since you use "value" in the first bullet

Suggested change
- Filtering with a ``None`` key incorrectly returns objects in which a key
does not exist.
- Filtering for ``None`` values incorrectly returns objects in which a field
does not exist.


- 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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: remove comma before dependent clause

Suggested change
``EmbeddedModelField`` emulates a MongoDB embedded document, and performs
``EmbeddedModelField`` emulates a MongoDB embedded document and performs

``$lookup`` operations, see the :atlas:`Reduce $lookup Operations
</schema-suggestions/reduce-lookup-operations/>` guide in the Atlas
documentation.
- The performance of `CASCADE deletes <{+django-docs+}/ref/models/fields/#foreignkey>`__
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: might be better to link to the specific cascade section; also article

Suggested change
- The performance of `CASCADE deletes <{+django-docs+}/ref/models/fields/#foreignkey>`__
- Performance of `CASCADE deletes <{+django-docs+}/ref/models/fields/#django.db.models.CASCADE>`__

- {+django-odm+} does not have any Django lookup operators for MongoDB-specific
geospatial queries.

Aggregation operators
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S:

Suggested change
Aggregation operators
Aggregation Operators

Aggregation operators
~~~~~~~~~~~~~~~~~~~~~

{+django-odm+} does not contain any custom Django Field lookups for the MongoDB
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: lowercase field (I think)

Suggested change
{+django-odm+} does not contain any custom Django Field lookups for the MongoDB
{+django-odm+} does not contain any custom Django field lookups for the MongoDB

Comment on lines 140 to 141
aggregation framework. Instead, use the ``raw_aggregate`` method. For more
information on the ``raw_aggregate`` method.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: you can link to the raw query guide; also, I'd add () after method names

Suggested change
aggregation framework. Instead, use the ``raw_aggregate`` method. For more
information on the ``raw_aggregate`` method.
aggregation framework. Instead, use the ``raw_aggregate()`` method. For more
information on the ``raw_aggregate()`` method, see
the :ref:`django-raw-queries` guide.

The following field types are unavailable in {+django-odm+}:

- ``GeneratedField``
- ``ImageField``
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``ImageField``
- ``AutoField``
- ``BigAutoField``
- ``SmallAutoField``

Looks like we support ImageField. I'll place

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can add to the fields in the Create Models guide

- Creation of ``$vectorSearch`` and ``$search`` indexes through the Django
Indexes API
- Creating geospatial indexes through the Django Indexes API
- Updating indexes in ``EmbeddedModelFields`` after model creation
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that's in the "Raw Queries" section

Copy link
Collaborator

@norareidy norareidy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with final small comments!


To learn how to run unsupported database operations by operating directly on
your ``MongoClient`` instance, see :ref:`django-client-operations` in the
Perform Raw Database Queries.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S:

Suggested change
Perform Raw Database Queries.
Perform Raw Database Queries guide.

The engineering team is prioritizing feature development for the Public Preview
release of {+django-odm+}. Because of this, you might notice performance
limitations with certain workloads. If you encounter any performance issues,
please report it as shown in the :ref:`Issues & Help <django-issues-and-help>`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

S: [nit]

Suggested change
please report it as shown in the :ref:`Issues & Help <django-issues-and-help>`
please report them as shown in the :ref:`Issues & Help <django-issues-and-help>`

The following field types are unavailable in {+django-odm+}:

- ``GeneratedField``
- ``ImageField``
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can add to the fields in the Create Models guide

@jordan-smith721 jordan-smith721 merged commit 2b67495 into mongodb:master Jan 31, 2025
1 check passed
@jordan-smith721 jordan-smith721 deleted the DOCSP-46329-limitations branch January 31, 2025 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants