4. Changelog¶
4.1. Development¶
(Fill this out as you fix issues and develop your features).
Fix Document.compare_indexes() not working correctly for text indexes on multiple fields #2612
Add support for transaction through run_in_transaction (kudos to juannyG for this) #2569 Some considerations:
make sure to read https://www.mongodb.com/docs/manual/core/transactions-in-applications/#callback-api-vs-core-api
run_in_transaction context manager relies on Pymongo coreAPI, it will retry automatically in case of UnknownTransactionCommitResult but not TransientTransactionError exceptions
Using .count() in a transaction will always use Collection.count_document (as estimated_document_count is not supported in transactions)
BREAKING CHANGE: wrap _document_registry (normally not used by end users) with _DocumentRegistry which acts as a singleton to access the registry
Log a warning in case users creates multiple Document classes with the same name as it can lead to unexpected behavior #1778
Fix use of $geoNear or $collStats in aggregate #2493
BREAKING CHANGE: Further to the deprecation warning, remove ability to use an unpacked list to Queryset.aggregate(*pipeline), a plain list must be provided instead Queryset.aggregate(pipeline), as it’s closer to pymongo interface
BREAKING CHANGE: Further to the deprecation warning, remove full_response from QuerySet.modify as it wasn’t supported with Pymongo 3+
Fixed stacklevel of many warnings (to point places emitting the warning more accurately)
Add support for collation/hint/comment to delete/update and aggregate #2842
BREAKING CHANGE: Remove LongField as it’s equivalent to IntField since we drop support to Python2 long time ago (User should simply switch to IntField) #2309
BugFix - Calling .clear on a ListField wasn’t being marked as changed (and flushed to db upon .save()) #2858
Improve error message in case a document assigned to a ReferenceField wasn’t saved yet #1955
BugFix - Take where() into account when using .modify(), as in MyDocument.objects().where("this[field] >= this[otherfield]").modify(field=’new’) #2044
4.2. Changes in 0.29.0¶
Fix weakref in EmbeddedDocumentListField (causing brief mem leak in certain circumstances) #2827
Fix pillow deprecation warning related with LANCZOS filter #2824
Allow gt/gte/lt/lte/ne operators to be used with a list as value on ListField #2813
Switch tox to use pytest instead of legacy python setup.py test #2804
Add support for timeseries collection #2661
Add support in tests for MongoDB 7.0, pymongo 4.7 and pymongo 4.8 in the CI #2826
Add support for array_filters in Queryset.modify #2811
Integrate a docker-compose setup for local testing #2555
improve ReferenceField wrong usage detection
Fix no_dereference thread-safetyness #2830
BREAKING CHANGE: max_length in ListField is now keyword only on ListField signature
BREAKING CHANGE: Force field argument of ListField/DictField to be a field instance (e.g ListField(StringField()) instead of ListField(StringField)
4.3. Changes in 0.28.2¶
Fix typing import incompatible with Pymongo 3.7 #2802
4.4. Changes in 0.28.1¶
Fix bug related with recent updates to no_dereference context manager #2799
4.5. Changes in 0.28.0¶
Fix for uuidRepresentation not read when provided in URI #2741
Add option to user array_filters https://www.mongodb.com/docs/manual/reference/operator/update/positional-filtered/ #2769
Fix combination of __raw__ and mongoengine syntax #2773
Add tests against MongoDB 6.0 and MongoDB 7.0 in the pipeline
Fix validate() not being called when inheritance is used in EmbeddedDocument and validate is overriden #2784
Add support for readPreferenceTags in connection parameters #2644
Use estimated_documents_count OR documents_count when count is called, based on the query #2529
Fix no_dereference context manager which wasn’t turning off auto-dereferencing correctly in some cases #2788
- BREAKING CHANGE: no_dereference context manager no longer returns the class in __enter__ #2788
as it was useless and making it look like it was returning a different class although it was the same. Thus, it must be called like with no_dereference(User): and no longer with no_dereference(User) as ...:
Added __raw__ to
order_by()to allow to provide raw pymongo ‘sort’ argument and get around some of the limitations #2783- Add text_score argument on
search_text()to allow text_score computation to be turned off as it interfere with natural returned documents order #2759
- Add text_score argument on
4.6. Changes in 0.27.0¶
Update uuidRepresentation warnings with "unspecified" as the future default (instead of ‘standard’ previously advertised) #2739
Added mongo_client_class optional parameter to connect() to allow to use an alternative mongo client than pymongo.MongoClient. Typically to support mock mongo libraries like mongomock, montydb, mongita #2729
BREAKING CHANGE: connecting MongoEngine with mongomock should now use the new mongo_client_class For more info, check https://docs.mongoengine.org/guide/mongomock.html
Fix DictField that always gets marked as changed #2606
fix for Queryset.none() that has no effect on update/aggregate / first #2669
4.7. Changes in 0.26.0¶
BREAKING CHANGE: Improved the performance of
save()by removing the call toensure_indexes()unlessmeta['auto_create_index_on_save']is set to True. With the default settings, Document indexes will still be created on the fly, during the first usage of the collection (query, insert, etc), they will just not be re-created whenever .save() is called.Added meta
auto_create_index_on_saveso you can enable index creation onsave()(as it was < 0.26.0).BREAKING CHANGE: remove deprecated method
ensure_index(replaced bycreate_indexlong time ago).Addition of Decimal128Field:
Decimal128Fieldfor accurate representation of Decimals (much better than the legacy field DecimalField). Although it could work to switch an existing DecimalField to Decimal128Field without applying a migration script, it is not recommended to do so (DecimalField uses float/str to store the value, Decimal128Field uses Decimal128).BREAKING CHANGE: When using ListField(EnumField) or DictField(EnumField), the values weren’t always cast into the Enum (#2531)
BREAKING CHANGE (bugfix) Querying ObjectIdField or ComplexDateTimeField with None no longer raise a ValidationError (#2681)
Allow updating a field that has an operator name e.g. "type" with .update(set__type="foo"). It was raising an error previously. #2595
4.8. Changes in 0.25.0¶
Support MONGODB-AWS authentication mechanism (with authmechanismproperties) #2507
Bug Fix - distinct query doesn’t obey the
no_dereference(). #2663Add tests against Mongo 5.0 in pipeline
Drop support for Python 3.6 (EOL)
Bug fix support for PyMongo>=4 to fix "pymongo.errors.InvalidOperation: Cannot use MongoClient after close" errors. #2627
4.9. Changes in 0.24.2¶
Bug fix regarding uuidRepresentation that was case sensitive #2650
4.10. Changes in 0.24.1¶
Allow pymongo<5.0 to be pulled
Don’t use deprecated property for emptiness check in queryset base #2633
4.11. Changes in 0.24.0¶
EnumField improvements: now
choiceslimits the values of an enum to allowFix bug that prevented instance queryset from using custom queryset_class #2589
Fix deepcopy of EmbeddedDocument #2202
Introduce a base exception class for MongoEngine exceptions (MongoEngineException). Note that this doesn’t concern the pymongo errors #2515
Fix error when using precision=0 with DecimalField #2535
Add support for regex and whole word text search query #2568
Add support for update aggregation pipeline #2578
BREAKING CHANGE: Updates to support pymongo 4.0. Where possible deprecated functionality has been migrated, but additional care should be taken when migrating to pymongo 4.0 as existing code may have been using deprecated features which have now been removed #2614.
For the pymongo migration guide see: https://pymongo.readthedocs.io/en/stable/migrate-to-pymongo4.html.
In addition to the changes in the migration guide, the following is a high level overview of the changes made to MongoEngine when using pymongo 4.0:
limited support of geohaystack indexes has been removed
QuerySet.map_reducehas been migrated fromCollection.map_reduceandCollection.inline_map_reduceto usedb.command({mapReduce: ..., ...})and support between the two may need additional verification.UUIDs are encoded with the
pythonLegacyencoding by default instead of the newer and cross platformstandardencoding. Existing UUIDs will need to be migrated before changing the encoding, and this should be done explicitly by the user rather than switching to a new default by MongoEngine. This default will change at a later date, but to allow specifying and then migrating to the new format a defaultjson_optionshas been provided.Queryset.counthas been usingCollection.count_documentsand transparently falling back toCollection.countwhen using features that are not supported byCollection.count_documents.Collection.counthas been removed and no automatic fallback is possible. The migration guide documents the extended functionality which is no longer supported. Rewrite the unsupported queries or fetch the whole result set and perform the count locally.Pymongo 4 removed db.authenticate(), on which we were relying for authenticating with username/password. The migration involved switching to providing credentials to MongoClient BUT in case the authSource isn’t provided, db.authenticate used to default to authSource=current-database and MongoClient defaults to authSource="admin". Long story short, if you observe authentication issue after migrating, make sure you provide the authSource explicitly. (see #2626)
4.12. Changes in 0.23.1¶
Bug fix: ignore LazyReferenceFields when clearing _changed_fields #2484
Improve connection doc #2481
4.13. Changes in 0.23.0¶
Bugfix: manually setting SequenceField in DynamicDocument doesn’t increment the counter #2471
Add MongoDB 4.2 and 4.4 to CI
Add support for allowDiskUse on querysets #2468
4.14. Changes in 0.22.1¶
Declare that Py3.5 is not supported in package metadata #2449
Moved CI from Travis to Github-Actions
4.15. Changes in 0.22.0¶
Fix LazyReferenceField dereferencing in embedded documents #2426
Fix regarding the recent use of Cursor.__spec in .count() that was interfering with mongomock #2425
Drop support for Python 3.5 by introducing f-strings in the codebase
4.16. Changes in 0.21.0¶
Bug fix in DynamicDocument which is not parsing known fields in constructor like Document do #2412
- When using pymongo >= 3.7, make use of Collection.count_documents instead of Collection.count
and Cursor.count that got deprecated in pymongo >= 3.7. This should have a negative impact on performance of count see Issue #2219
Fix a bug that made the queryset drop the read_preference after clone().
Remove Py3.5 from CI as it reached EOL and add Python 3.9
Fix some issues related with db_field/field conflict in constructor #2414
BREAKING CHANGE: Fix the behavior of Doc.objects.limit(0) which should return all documents (similar to mongodb) #2311
- Bug fix in ListField when updating the first item, it was saving the whole list, instead of
just replacing the first item (as usually done when updating 1 item of the list) #2392
Add EnumField:
mongoengine.fields.EnumFieldRefactoring - Remove useless code related to Document.__only_fields and Queryset.only_fields
Fix query transformation regarding special operators #2365
Bug Fix: Document.save() fails when shard_key is not _id #2154
4.17. Changes in 0.20.0¶
ATTENTION: Drop support for Python2
Add Mongo 4.0 to Travis
Fix error when setting a string as a ComplexDateTimeField #2253
Bump development Status classifier to Production/Stable #2232
Improve Queryset.get to avoid confusing MultipleObjectsReturned message in case multiple match are found #630
Fixed a bug causing inaccurate query results, while combining
__raw__and regular filters for the same field #2264Add support for the elemMatch projection operator in .fields() (e.g BlogPost.objects.fields(elemMatch__comments="test")) #2267
DictField validate failed without default connection (bug introduced in 0.19.0) #2239
- Remove methods that were deprecated years ago:
name parameter in Field constructor e.g StringField(name="..."), was replaced by db_field
Queryset.slave_okay() was deprecated since pymongo3
dropDups was dropped with MongoDB3
Queryset._ensure_indexesandQueryset.ensure_indexes, the right method to use isDocument.ensure_indexes
Added pre-commit for development/CI #2212
Renamed requirements-lint.txt to requirements-dev.txt #2212
Support for setting ReadConcern #2255
4.18. Changes in 0.19.1¶
Tests require Pillow < 7.0.0 as it dropped Python2 support
- DEPRECATION: The interface of
QuerySet.aggregatemethod was changed, it no longer takes an unpacked list of pipeline steps (*pipeline) but simply takes the pipeline list just like
pymongo.Collection.aggregatedoes. #2079
- DEPRECATION: The interface of
4.19. Changes in 0.19.0¶
- BREAKING CHANGE:
class_checkandread_preferencekeyword arguments are no longer available when filtering aQuerySet. #2112 Instead of
Doc.objects(foo=bar, read_preference=...)useDoc.objects(foo=bar).read_preference(...).Instead of
Doc.objects(foo=bar, class_check=False)useDoc.objects(foo=bar).clear_cls_query(...).This change also renames the private
QuerySet._initial_queryattribute to_cls_query.
- BREAKING CHANGE:
BREAKING CHANGE: Removed the deprecated
formatparam fromQuerySet.explain. #2113- BREAKING CHANGE: Renamed
MongoEngineConnectionErrortoConnectionFailure. #2111 If you catch/use
MongoEngineConnectionErrorin your code, you’ll have to rename it.
- BREAKING CHANGE: Renamed
- BREAKING CHANGE: Positional arguments when instantiating a document are no longer supported. #2103
From now on keyword arguments (e.g.
Doc(field_name=value)) are required.
BREAKING CHANGE: A
LazyReferenceFieldis now stored in the_datafield of its parent as aDBRef,Document, orEmbeddedDocument(ObjectIdis no longer allowed). #2182- DEPRECATION:
Q.empty&QNode.emptyare marked as deprecated and will be removed in a next version of MongoEngine. #2210 Added ability to check if Q or QNode are empty by parsing them to bool.
Instead of
Q(name="John").emptyusenot Q(name="John").
- DEPRECATION:
Fix updating/modifying/deleting/reloading a document that’s sharded by a field with
db_fieldspecified. #2125Only set no_cursor_timeout when requested (fixes an incompatibility with MongoDB 4.2) #2148
ListFieldnow accepts an optionalmax_lengthparameter. #2110Improve error message related to InvalidDocumentError #2180
Added BulkWriteError to replace NotUniqueError which was misleading in bulk write insert #2152
Added ability to compare Q and Q operations #2204
Added ability to use a db alias on query_counter #2194
Added ability to specify collations for querysets with
Doc.objects.collation#2024Fix updates of a list field by negative index #2094
Switch from nosetest to pytest as test runner #2114
The codebase is now formatted using
black. #2109- Documentation improvements:
Documented how pymongo.monitoring can be used to log all queries issued by MongoEngine to the driver.
4.20. Changes in 0.18.2¶
Replace deprecated PyMongo v2.x methods with their v3.x equivalents in the
SequenceField. #2097Various code clarity and documentation improvements.
4.21. Changes in 0.18.1¶
Fix a bug introduced in 0.18.0 which was causing
Document.saveto update all the fields instead of updating only the modified fields. This bug only occurred when using a custom PK. #2082Add Python 3.7 to Travis CI. #2058
4.22. Changes in 0.18.0¶
Drop support for EOL’d MongoDB v2.6, v3.0, and v3.2.
MongoEngine now requires PyMongo >= v3.4. Travis CI now tests against MongoDB v3.4 – v3.6 and PyMongo v3.4 – v3.6. #2017 #2066
Improve performance by avoiding a call to
to_mongoinDocument.save. #2049- Connection/disconnection improvements:
Expose
mongoengine.connection.disconnectandmongoengine.connection.disconnect_all.Fix disconnecting. #566 #1599 #605 #607 #1213 #565
Improve documentation of
connect/disconnect.Fix issue when using multiple connections to the same mongo with different credentials. #2047
connectfails immediately when db name contains invalid characters. #2031 #1718
Fix the default write concern of
Document.savethat was overwriting the connection write concern. #568Fix querying on
List(EmbeddedDocument)subclasses fields. #1961 #1492Fix querying on
(Generic)EmbeddedDocumentsubclasses fields. #475Fix
QuerySet.aggregateso that it takes limit and skip value into account. #2029Generate unique indices for
SortedListFieldandEmbeddedDocumentListFields. #2020BREAKING CHANGE: Changed the behavior of a custom field validator (i.e
validationparameter of aField). It is now expected to raise aValidationErrorinstead of returningTrue/False. #2050- BREAKING CHANGES (associated with connection/disconnection fixes):
Calling
connect2 times with the same alias and different parameter will raise an error (should calldisconnectfirst).disconnectnow clearsmongoengine.connection._connection_settings.disconnectnow clears the cached attributeDocument._collection.
BREAKING CHANGE:
EmbeddedDocument.save&.reloadno longer exist. #1552
4.23. Changes in 0.17.0¶
POTENTIAL BREAKING CHANGE: All result fields are now passed, including internal fields (
_cls,_id) when usingQuerySet.as_pymongo. #1976Document a BREAKING CHANGE introduced in 0.15.3 and not reported at that time. #1995
DEPRECATION:
EmbeddedDocument.save&.reloadare marked as deprecated and will be removed in a next version of MongoEngine. #1552Fix
QuerySet.onlyworking improperly after usingQuerySet.countof the same instance of aQuerySet.Fix
batch_sizethat was not copied when cloning aQuerySetobject. #2011Fix
InvalidStringDataerror when usingmodifyon aBinaryField. #1127Fix test suite and CI to support MongoDB v3.4. #1445
Fix reference fields querying the database on each access if value contains orphan DBRefs.
4.24. Changes in 0.16.3¶
Fix
$pushwith the$positionoperator not working with lists in embedded documents. #1965
4.25. Changes in 0.16.2¶
Fix
Document.savethat fails when called withwrite_concern=None(regression of 0.16.1). #1958
4.26. Changes in 0.16.1¶
Fix
_clsthat is not set properly in theDocumentconstructor (regression). #1950Fix a bug in the
_deltamethod - update of aListFielddepends on an unrelated dynamic field update. #1733Remove PyMongo’s deprecated
Collection.savemethod and useCollection.insert_oneinstead. #1899
4.27. Changes in 0.16.0¶
- POTENTIAL BREAKING CHANGES:
EmbeddedDocumentFieldwill no longer accept references to Document classes in its constructor. #1661Get rid of the
baseclsparameter from theDictFieldconstructor (dead code). #1876Default value of the
ComplexDateTimefield is nowNone(and no longer the current datetime). #1368
Fix an unhashable
TypeErrorwhen referencing aDocumentwith a compound key in anEmbeddedDocument. #1685Fix a bug where an
EmbeddedDocumentwith the same id as its parent would not be tracked for changes. #1768Fix the fact that a bulk
QuerySet.insertwas not setting primary keys of inserted document instances. #1919Fix a bug when referencing an abstract class in a
ReferenceField. #1920Allow modifications to the document made in
pre_save_post_validationto be taken into account. #1202Replace MongoDB v2.4 tests in Travis CI with MongoDB v3.2. #1903
Fix side effects of using
QuerySet.no_dereferenceon other documents. #1677Fix
TypeErrorwhen using lazy Django translation objects as translated choices. #1879Improve Python 2-3 codebase compatibility. #1889
Fix support for changing the default value of the
ComplexDateTimefield. #1368Improve error message in case an
EmbeddedDocumentListFieldreceives anEmbeddedDocumentinstance instead of a list. #1877Fix the
incanddecoperators for theDecimalField. #1517 #1320Ignore
killcursorsqueries inquery_countercontext manager. #1869Fix the fact that
query_counterwas modifying the initial profiling level in case it was != 0. #1870Repair the
no_sub_classescontext manager + fix the fact that it was swallowing exceptions. #1865Fix index creation error that was swallowed by
hasattrunder Python 2. #1688QuerySet.limitfunction behaviour: Passing 0 as parameter will return all the documents in the cursor. #1611Bulk insert updates the IDs of the input documents instances. #1919
Fix a harmless bug related to
GenericReferenceFieldwhere modifications in the generic-referenced document were tracked in the parent. #1934Improve validation of the
BinaryField. #273Implement lazy regex compiling in Field classes to improve
import mongoengineperformance. #1806Update
GridFSProxy.__str__so that it would always print both the filename and grid_id. #710Add
__repr__toQandQCombinationclasses. #1843Fix bug in the
BaseList.__iter__operator (was occuring when modifying a BaseList while iterating over it). #1676Add a
DateField. #513Various improvements to the documentation.
Various code quality improvements.
4.28. Changes in 0.15.3¶
Queryset.update/update_onemethods now return anUpdateResultwhenfull_result=Trueis provided and no longer a dict. #1491Improve
LazyReferenceFieldandGenericLazyReferenceFieldwith nested fields. #1704Fix the subfield resolve error in
generic_emdedded_documentquery. #1651 #1652Use each modifier only with
$position. #1673 #1675Fix validation errors in the
GenericEmbeddedDocumentField. #1067Update cached fields when a
fieldsargument is given. #1712Add a
dbparameter toregister_connectionfor compatibility withconnect.Use PyMongo v3.x’s
insert_oneandinsert_manyinDocument.insert. #1491Use PyMongo v3.x’s
update_oneandupdate_manyinDocument.updateandQuerySet.update. #1491Fix how
reload(fields)affects changed fields. #1371Fix a bug where the read-only access to the database fails when trying to create indexes. #1338
4.29. Changes in 0.15.0¶
Add
LazyReferenceFieldandGenericLazyReferenceField. #1230
4.30. Changes in 0.14.1¶
Remove
SemiStrictDictand start using a regular dict forBaseDocument._data. #1630Add support for the
$positionparam in the$pushoperator. #1566Fix
DateTimeFieldinterpreting an empty string as today. #1533Add a missing
__ne__method to theGridFSProxyclass. #1632Fix
BaseQuerySet._fields_to_db_fields. #1553
4.31. Changes in 0.14.0¶
BREAKING CHANGE: Remove the
coerce_typesparam fromQuerySet.as_pymongo. #1549POTENTIAL BREAKING CHANGE: Make
EmbeddedDocumentnot hashable by default. #1528Improve code quality. #1531, #1540, #1541, #1547
4.32. Changes in 0.13.0¶
POTENTIAL BREAKING CHANGE: Added Unicode support to the
EmailField, see docs/upgrade.rst for details.
4.33. Changes in 0.12.0¶
POTENTIAL BREAKING CHANGE: Fix
limit/skip/hint/batch_sizechaining. #1476POTENTIAL BREAKING CHANGE: Change a public
QuerySet.clone_intomethod to a privateQuerySet._clone_into. #1476Fix the way
Document.objects.createworks with duplicate IDs. #1485Fix connecting to a replica set with PyMongo 2.x. #1436
Fix using sets in field choices. #1481
Fix deleting items from a
ListField. #1318Fix an obscure error message when filtering by
field__in=non_iterable. #1237Fix behavior of a
decupdate operator. #1450Add a
renameupdate operator. #1454Add validation for the
db_fieldparameter. #1448Fix the error message displayed when querying an
EmbeddedDocumentFieldby an invalid value. #1440Fix the error message displayed when validating Unicode URLs. #1486
Raise an error when trying to save an abstract document. #1449
4.34. Changes in 0.11.0¶
BREAKING CHANGE: Rename
ConnectionErrortoMongoEngineConnectionErrorsince the former is a built-in exception name in Python v3.x. #1428BREAKING CHANGE: Drop Python v2.6 support. #1428
BREAKING CHANGE:
from mongoengine.base import ErrorClasswon’t work anymore for any error frommongoengine.errors(e.g.ValidationError). Usefrom mongoengine.errors import ErrorClass instead. #1428BREAKING CHANGE: Accessing a broken reference will raise a
DoesNotExisterror. In the past it used to returnNone. #1334Fix absent rounding for the
DecimalFieldwhenforce_stringis set. #1103
4.35. Changes in 0.10.8¶
Add support for
QuerySet.batch_size. (#1426)Fix a query set iteration within an iteration. #1427
Fix an issue where specifying a MongoDB URI host would override more information than it should. #1421
Add an ability to filter the
GenericReferenceFieldby anObjectIdand aDBRef. #1425Fix cascading deletes for models with a custom primary key field. #1247
Add ability to specify an authentication mechanism (e.g. X.509). #1333
Add support for falsy primary keys (e.g.
doc.pk = 0). #1354Fix
QuerySet.sum/averagefor fields w/ an explicitdb_field. #1417Fix filtering by
embedded_doc=None. #1422Add support for
Cursor.comment. #1420Fix
doc.get_<field>_displaymethods. #1419Fix the
__repr__method of theStrictDict#1424Add a deprecation warning for Python v2.6.
4.36. Changes in 0.10.7¶
Drop Python 3.2 support #1390
Fix a bug where a dynamic doc has an index inside a dict field. #1278
Fix:
ListFieldminus index assignment does not work. #1128Fix cascade delete mixing among collections. #1224
Add
signal_kwargsargument toDocument.save,Document.deleteandBaseQuerySet.insertto be passed to signals calls. #1206Raise
OperationErrorwhen trying to do adrop_collectionon document with no collection set.Fix a bug where a count on
ListFieldofEmbeddedDocumentFieldfails. #1187Fix
LongFieldvalues stored as int32 in Python 3. #1253MapFieldnow handles unicode keys correctly. #1267ListFieldnow handles negative indicies correctly. #1270Fix an
AttributeErrorwhen initializing anEmbeddedDocumentwith positional args. #681Fix a
no_cursor_timeouterror with PyMongo v3.x. #1304Replace map-reduce based
QuerySet.sum/averagewith aggregation-based implementations. #1336Fix support for
__to escape field names that match operators’ names inupdate. #1351Fix
BaseDocument._mark_as_changed. #1369Add support for pickling
QuerySetinstances. #1397Fix connecting to a list of hosts. #1389
Fix a bug where accessing broken references wouldn’t raise a
DoesNotExisterror. #1334Fix not being able to specify
use_db_field=FalseonListField(EmbeddedDocumentField)instances. #1218Improvements to the dictionary field’s docs. #1383
4.37. Changes in 0.10.6¶
Add support for mocking MongoEngine based on mongomock. #1151
Fix not being able to run tests on Windows. #1153
Allow creation of sparse compound indexes. #1114
4.38. Changes in 0.10.5¶
Fix for reloading of strict with special fields. #1156
4.39. Changes in 0.10.4¶
SaveConditionErroris now importable from the top level package. #1165Add a
QuerySet.upsert_onemethod. #1157
4.40. Changes in 0.10.3¶
Fix
read_preference(it had chaining issues with PyMongo v2.x and it didn’t work at all with PyMongo v3.x). #1042
4.41. Changes in 0.10.2¶
Allow shard key to point to a field in an embedded document. #551
Allow arbirary metadata in fields. #1129
ReferenceFields now support abstract document types. #837
4.42. Changes in 0.10.1¶
Fix infinite recursion with cascade delete rules under specific conditions. #1046
Fix
CachedReferenceFieldbug when loading cached docs asDBRefbut failing to save them. #1047Fix ignored chained options. #842
Document.save’ssave_conditionerror raises aSaveConditionErrorexception. #1070Fix
Document.reloadfor theDynamicDocument. #1050StrictDict&SemiStrictDictare shadowed at init time. #1105Fix
ListFieldnegative index assignment not working. #1119Remove code that marks a field as changed when the field has a default value but does not exist in the database. #1126
Remove test dependencies (nose and rednose) from install dependencies. #1079
Recursively build a query when using the
elemMatchoperator. #1130Fix instance back references for lists of embedded documents. #1131
4.43. Changes in 0.10.0¶
Django support was removed and will be available as a separate extension. #958
Allow to load undeclared field with meta attribute ‘strict’: False #957
Support for PyMongo 3+ #946
Removed get_or_create() deprecated since 0.8.0. #300
Improve Document._created status when switch collection and db #1020
Queryset update doesn’t go through field validation #453
Added support for specifying authentication source as option
authSourcein URI. #967Fixed mark_as_changed to handle higher/lower level fields changed. #927
ListField of embedded docs doesn’t set the _instance attribute when iterating over it #914
Support += and *= for ListField #595
Use sets for populating dbrefs to dereference
Fixed unpickled documents replacing the global field’s list. #888
Fixed storage of microseconds in ComplexDateTimeField and unused separator option. #910
Don’t send a "cls" option to ensureIndex (related to https://jira.mongodb.org/browse/SERVER-769)
Fix for updating sorting in SortedListField. #978
Added __ support to escape field name in fields lookup keywords that match operators names #949
Fix for issue where FileField deletion did not free space in GridFS.
No_dereference() not respected on embedded docs containing reference. #517
Document save raise an exception if save_condition fails #1005
Fixes some internal _id handling issue. #961
Updated URL and Email Field regex validators, added schemes argument to URLField validation. #652
Capped collection multiple of 256. #1011
Added
BaseQuerySet.aggregate_sumandBaseQuerySet.aggregate_averagemethods.Fix for delete with write_concern {‘w’: 0}. #1008
Allow dynamic lookup for more than two parts. #882
Added support for min_distance on geo queries. #831
Allow to add custom metadata to fields #705
4.44. Changes in 0.9.0¶
Update FileField when creating a new file #714
Added
EmbeddedDocumentListFieldfor Lists of Embedded Documents. #826ComplexDateTimeField should fall back to None when null=True #864
Request Support for $min, $max Field update operators #863
BaseDictdoes not followsetdefault#866Add support for $type operator # 766
Fix tests for pymongo 2.8+ #877
No module named ‘django.utils.importlib’ (Django dev) #872
Field Choices Now Accept Subclasses of Documents
Ensure Indexes before Each Save #812
Generate Unique Indices for Lists of EmbeddedDocuments #358
Sparse fields #515
write_concern not in params of Collection#remove #801
Better BaseDocument equality check when not saved #798
OperationError: Shard Keys are immutable. Tried to update id even though the document is not yet saved #771
with_limit_and_skip for count should default like in pymongo #759
Fix storing value of precision attribute in DecimalField #787
Set attribute to None does not work (at least for fields with default values) #734
Querying by a field defined in a subclass raises InvalidQueryError #744
Add Support For MongoDB 2.6.X’s maxTimeMS #778
abstract shouldn’t be inherited in EmbeddedDocument # 789
Allow specifying the ‘_cls’ as a field for indexes #397
Stop ensure_indexes running on a secondaries unless connection is through mongos #746
Not overriding default values when loading a subset of fields #399
Saving document doesn’t create new fields in existing collection #620
Added
Queryset.aggregatewrapper to aggregation framework #703Added support to show original model fields on to_json calls instead of db_field #697
Added Queryset.search_text to Text indexes searchs #700
Fixed tests for Django 1.7 #696
Follow ReferenceFields in EmbeddedDocuments with select_related #690
Added preliminary support for text indexes #680
Added
elemMatchoperator as well -matchis too obscure #653Added support for progressive JPEG #486 #548
Allow strings to be used in index creation #675
Fixed EmbeddedDoc weakref proxy issue #592
Fixed nested reference field distinct error #583
Fixed change tracking on nested MapFields #539
Dynamic fields in embedded documents now visible to queryset.only() / qs.exclude() #425 #507
Add authentication_source option to register_connection #178 #464 #573 #580 #590
Implemented equality between Documents and DBRefs #597
Fixed ReferenceField inside nested ListFields dereferencing problem #368
Added the ability to reload specific document fields #100
Added db_alias support and fixes for custom map/reduce output #586
post_save signal now has access to delta information about field changes #594 #589
Don’t query with $orderby for qs.get() #600
Fix id shard key save issue #636
Fixes issue with recursive embedded document errors #557
Fix clear_changed_fields() clearing unsaved documents bug #602
Removing support for Django 1.4.x, pymongo 2.5.x, pymongo 2.6.x.
Removing support for Python < 2.6.6
Fixed $maxDistance location for geoJSON $near queries with MongoDB 2.6+ #664
QuerySet.modify() and Document.modify() methods to provide find_and_modify() like behaviour #677 #773
Added support for the using() method on a queryset #676
PYPY support #673
Connection pooling #674
Avoid to open all documents from cursors in an if stmt #655
Ability to clear the ordering #657
Raise NotUniqueError in Document.update() on pymongo.errors.DuplicateKeyError #626
Slots - memory improvements #625
Fixed incorrectly split a query key when it ends with "_" #619
Geo docs updates #613
Workaround a dateutil bug #608
Conditional save for atomic-style operations #511
Allow dynamic dictionary-style field access #559
Increase email field length to accommodate new TLDs #726
index_cls is ignored when deciding to set _cls as index prefix #733
Make ‘db’ argument to connection optional #737
Allow atomic update for the entire
DictField#742Added MultiPointField, MultiLineField, MultiPolygonField
Fix multiple connections aliases being rewritten #748
Fixed a few instances where reverse_delete_rule was written as reverse_delete_rules. #791
Make
in_bulk()respectno_dereference()#775Handle None from model __str__; Fixes #753 #754
_get_changed_fields fix for embedded documents with id field. #925
4.45. Changes in 0.8.7¶
Calling reload on deleted / nonexistent documents raises DoesNotExist (#538)
Stop ensure_indexes running on a secondaries (#555)
Fix circular import issue with django auth (#531) (#545)
4.46. Changes in 0.8.6¶
Fix django auth import (#531)
4.47. Changes in 0.8.5¶
Fix multi level nested fields getting marked as changed (#523)
Django 1.6 login fix (#522) (#527)
Django 1.6 session fix (#509)
EmbeddedDocument._instance is now set when setting the attribute (#506)
Fixed EmbeddedDocument with ReferenceField equality issue (#502)
Fixed GenericReferenceField serialization order (#499)
Fixed count and none bug (#498)
Fixed bug with .only() and DictField with digit keys (#496)
Added user_permissions to Django User object (#491, #492)
Fix updating Geo Location fields (#488)
Fix handling invalid dict field value (#485)
Added app_label to MongoUser (#484)
Use defaults when host and port are passed as None (#483)
Fixed distinct casting issue with ListField of EmbeddedDocuments (#470)
Fixed Django 1.6 sessions (#454, #480)
4.48. Changes in 0.8.4¶
Remove database name necessity in uri connection schema (#452)
Fixed "$pull" semantics for nested ListFields (#447)
Allow fields to be named the same as query operators (#445)
Updated field filter logic - can now exclude subclass fields (#443)
Fixed dereference issue with embedded listfield referencefields (#439)
Fixed slice when using inheritance causing fields to be excluded (#437)
Fixed ._get_db() attribute after a Document.switch_db() (#441)
Dynamic Fields store and recompose Embedded Documents / Documents correctly (#449)
Handle dynamic fieldnames that look like digits (#434)
Added get_user_document and improve mongo_auth module (#423)
Added str representation of GridFSProxy (#424)
Update transform to handle docs erroneously passed to unset (#416)
Fixed indexing - turn off _cls (#414)
Fixed dereference threading issue in ComplexField.__get__ (#412)
Fixed QuerySetNoCache.count() caching (#410)
Don’t follow references in _get_changed_fields (#422, #417)
Allow args and kwargs to be passed through to_json (#420)
4.49. Changes in 0.8.3¶
Fixed EmbeddedDocuments with
idalso storing_id(#402)Added get_proxy_object helper to filefields (#391)
Added QuerySetNoCache and QuerySet.no_cache() for lower memory consumption (#365)
Fixed sum and average mapreduce dot notation support (#375, #376, #393)
Fixed as_pymongo to return the id (#386)
Document.select_related() now respects
db_alias(#377)Reload uses shard_key if applicable (#384)
Dynamic fields are ordered based on creation and stored in _fields_ordered (#396)
Fixed pickling dynamic documents
_dynamic_fields(#387)Fixed ListField setslice and delslice dirty tracking (#390)
Added Django 1.5 PY3 support (#392)
Added match ($elemMatch) support for EmbeddedDocuments (#379)
Fixed weakref being valid after reload (#374)
Fixed queryset.get() respecting no_dereference (#373)
Added full_result kwarg to update (#380)
4.50. Changes in 0.8.2¶
Added compare_indexes helper (#361)
Fixed cascading saves which weren’t turned off as planned (#291)
Fixed Datastructures so instances are a Document or EmbeddedDocument (#363)
Improved cascading saves write performance (#361)
Fixed ambiguity and differing behaviour regarding field defaults (#349)
ImageFields now include PIL error messages if invalid error (#353)
Added lock when calling doc.Delete() for when signals have no sender (#350)
Reload forces read preference to be PRIMARY (#355)
Querysets are now lest restrictive when querying duplicate fields (#332, #333)
FileField now honouring db_alias (#341)
Removed customised __set__ change tracking in ComplexBaseField (#344)
Removed unused var in _get_changed_fields (#347)
Added pre_save_post_validation signal (#345)
DateTimeField now auto converts valid datetime isostrings into dates (#343)
DateTimeField now uses dateutil for parsing if available (#343)
Fixed Doc.objects(read_preference=X) not setting read preference (#352)
Django session ttl index expiry fixed (#329)
Fixed pickle.loads (#342)
Documentation fixes
4.51. Changes in 0.8.1¶
Fixed Python 2.6 django auth importlib issue (#326)
Fixed pickle unsaved document regression (#327)
4.52. Changes in 0.8.0¶
Fixed querying ReferenceField custom_id (#317)
Fixed pickle issues with collections (#316)
Added
get_next_valuepreview for SequenceFields (#319)Added no_sub_classes context manager and queryset helper (#312)
Querysets now utilises a local cache
Changed __len__ behaviour in the queryset (#247, #311)
Fixed querying string versions of ObjectIds issue with ReferenceField (#307)
Added $setOnInsert support for upserts (#308)
Upserts now possible with just query parameters (#309)
Upserting is the only way to ensure docs are saved correctly (#306)
Fixed register_delete_rule inheritance issue
Fix cloning of sliced querysets (#303)
Fixed update_one write concern (#302)
Updated minimum requirement for pymongo to 2.5
Add support for new geojson fields, indexes and queries (#299)
If values cant be compared mark as changed (#287)
Ensure as_pymongo() and to_json honour only() and exclude() (#293)
Document serialization uses field order to ensure a strict order is set (#296)
DecimalField now stores as float not string (#289)
UUIDField now stores as a binary by default (#292)
Added Custom User Model for Django 1.5 (#285)
Cascading saves now default to off (#291)
ReferenceField now store ObjectId’s by default rather than DBRef (#290)
Added ImageField support for inline replacements (#86)
Added SequenceField.set_next_value(value) helper (#159)
Updated .only() behaviour - now like exclude it is chainable (#202)
Added with_limit_and_skip support to count() (#235)
Objects queryset manager now inherited (#256)
Updated connection to use MongoClient (#262, #274)
Fixed db_alias and inherited Documents (#143)
Documentation update for document errors (#124)
Deprecated
get_or_create(#35)Updated inheritable objects created by upsert now contain _cls (#118)
Added support for creating documents with embedded documents in a single operation (#6)
Added to_json and from_json to Document (#1)
Added to_json and from_json to QuerySet (#131)
Updated index creation now tied to Document class (#102)
Added none() to queryset (#127)
Updated SequenceFields to allow post processing of the calculated counter value (#141)
Added clean method to documents for pre validation data cleaning (#60)
Added support setting for read prefrence at a query level (#157)
Added _instance to EmbeddedDocuments pointing to the parent (#139)
Inheritance is off by default (#122)
Remove _types and just use _cls for inheritance (#148)
Only allow QNode instances to be passed as query objects (#199)
Dynamic fields are now validated on save (#153) (#154)
Added support for multiple slices and made slicing chainable. (#170) (#190) (#191)
Fixed GridFSProxy __getattr__ behaviour (#196)
Fix Django timezone support (#151)
Simplified Q objects, removed QueryTreeTransformerVisitor (#98) (#171)
FileFields now copyable (#198)
Querysets now return clones and are no longer edit in place (#56)
Added support for $maxDistance (#179)
Uses getlasterror to test created on updated saves (#163)
Fixed inheritance and unique index creation (#140)
Fixed reverse delete rule with inheritance (#197)
Fixed validation for GenericReferences which haven’t been dereferenced
Added switch_db context manager (#106)
Added switch_db method to document instances (#106)
Added no_dereference context manager (#82) (#61)
Added switch_collection context manager (#220)
Added switch_collection method to document instances (#220)
Added support for compound primary keys (#149) (#121)
Fixed overriding objects with custom manager (#58)
Added no_dereference method for querysets (#82) (#61)
Undefined data should not override instance methods (#49)
Added Django Group and Permission (#142)
Added Doc class and pk to Validation messages (#69)
Fixed Documents deleted via a queryset don’t call any signals (#105)
Added the "get_decoded" method to the MongoSession class (#216)
Fixed invalid choices error bubbling (#214)
Updated Save so it calls $set and $unset in a single operation (#211)
Fixed inner queryset looping (#204)
4.53. Changes in 0.7.10¶
Fix UnicodeEncodeError for dbref (#278)
Allow construction using positional parameters (#268)
Updated EmailField length to support long domains (#243)
Added 64-bit integer support (#251)
Added Django sessions TTL support (#224)
Fixed issue with numerical keys in MapField(EmbeddedDocumentField()) (#240)
Fixed clearing _changed_fields for complex nested embedded documents (#237, #239, #242)
Added "id" back to _data dictionary (#255)
Only mark a field as changed if the value has changed (#258)
Explicitly check for Document instances when dereferencing (#261)
Fixed order_by chaining issue (#265)
Added dereference support for tuples (#250)
Resolve field name to db field name when using distinct(#260, #264, #269)
Added kwargs to doc.save to help interop with django (#223, #270)
Fixed cloning querysets in PY3
Int fields no longer unset in save when changed to 0 (#272)
Fixed ReferenceField query chaining bug fixed (#254)
4.54. Changes in 0.7.9¶
Better fix handling for old style _types
Embedded SequenceFields follow collection naming convention
4.55. Changes in 0.7.8¶
Fix sequence fields in embedded documents (#166)
Fix query chaining with .order_by() (#176)
Added optional encoding and collection config for Django sessions (#180, #181, #183)
Fixed EmailField so can add extra validation (#173, #174, #187)
Fixed bulk inserts can now handle custom pk’s (#192)
Added as_pymongo method to return raw or cast results from pymongo (#193)
4.56. Changes in 0.7.7¶
Fix handling for old style _types
4.57. Changes in 0.7.6¶
Unicode fix for repr (#133)
Allow updates with match operators (#144)
Updated URLField - now can have a override the regex (#136)
Allow Django AuthenticationBackends to work with Django user (hmarr/mongoengine#573)
Fixed reload issue with ReferenceField where dbref=False (#138)
4.58. Changes in 0.7.5¶
ReferenceFields with dbref=False use ObjectId instead of strings (#134) See ticket for upgrade notes (#134)
4.59. Changes in 0.7.4¶
Fixed index inheritance issues - firmed up testcases (#123) (#125)
4.60. Changes in 0.7.3¶
Reverted EmbeddedDocuments meta handling - now can turn off inheritance (#119)
4.61. Changes in 0.7.2¶
Update index spec generation so its not destructive (#113)
4.62. Changes in 0.7.1¶
Fixed index spec inheritance (#111)
4.63. Changes in 0.7.0¶
Updated queryset.delete so you can use with skip / limit (#107)
Updated index creation allows kwargs to be passed through refs (#104)
Fixed Q object merge edge case (#109)
Fixed reloading on sharded documents (hmarr/mongoengine#569)
Added NotUniqueError for duplicate keys (#62)
Added custom collection / sequence naming for SequenceFields (#92)
Fixed UnboundLocalError in composite index with pk field (#88)
Updated ReferenceField’s to optionally store ObjectId strings this will become the default in 0.8 (#89)
Added FutureWarning - save will default to
cascade=Falsein 0.8Added example of indexing embedded document fields (#75)
Fixed ImageField resizing when forcing size (#80)
Add flexibility for fields handling bad data (#78)
Embedded Documents no longer handle meta definitions
Use weakref proxies in base lists / dicts (#74)
Improved queryset filtering (hmarr/mongoengine#554)
Fixed Dynamic Documents and Embedded Documents (hmarr/mongoengine#561)
Fixed abstract classes and shard keys (#64)
Fixed Python 2.5 support
Added Python 3 support (thanks to Laine Heron)
4.64. Changes in 0.6.20¶
Added support for distinct and db_alias (#59)
Improved support for chained querysets when constraining the same fields (hmarr/mongoengine#554)
Fixed BinaryField lookup re (#48)
4.65. Changes in 0.6.19¶
Added Binary support to UUID (#47)
Fixed MapField lookup for fields without declared lookups (#46)
Fixed BinaryField python value issue (#48)
Fixed SequenceField non numeric value lookup (#41)
Fixed queryset manager issue (#52)
Fixed FileField comparision (hmarr/mongoengine#547)
4.66. Changes in 0.6.18¶
Fixed recursion loading bug in _get_changed_fields
4.67. Changes in 0.6.17¶
Fixed issue with custom queryset manager expecting explict variable names
4.68. Changes in 0.6.16¶
Fixed issue where db_alias wasn’t inherited
4.69. Changes in 0.6.15¶
Updated validation error messages
Added support for null / zero / false values in item_frequencies
Fixed cascade save edge case
Fixed geo index creation through reference fields
Added support for args / kwargs when using @queryset_manager
Deref list custom id fix
4.70. Changes in 0.6.14¶
Fixed error dict with nested validation
Fixed Int/Float fields and not equals None
Exclude tests from installation
Allow tuples for index meta
Fixed use of str in instance checks
Fixed unicode support in transform update
Added support for add_to_set and each
4.71. Changes in 0.6.13¶
Fixed EmbeddedDocument db_field validation issue
Fixed StringField unicode issue
Fixes __repr__ modifying the cursor
4.72. Changes in 0.6.12¶
Fixes scalar lookups for primary_key
Fixes error with _delta handling DBRefs
4.73. Changes in 0.6.11¶
Fixed inconsistency handling None values field attrs
Fixed map_field embedded db_field issue
Fixed .save() _delta issue with DbRefs
Fixed Django TestCase
Added cmp to Embedded Document
Added PULL reverse_delete_rule
Fixed CASCADE delete bug
Fixed db_field data load error
Fixed recursive save with FileField
4.74. Changes in 0.6.10¶
Fixed basedict / baselist to return super(..)
Promoted BaseDynamicField to DynamicField
4.75. Changes in 0.6.9¶
Fixed sparse indexes on inherited docs
Removed FileField auto deletion, needs more work maybe 0.7
4.76. Changes in 0.6.8¶
Fixed FileField losing reference when no default set
Removed possible race condition from FileField (grid_file)
Added assignment to save, can now do:
b = MyDoc(**kwargs).save()Added support for pull operations on nested EmbeddedDocuments
Added support for choices with GenericReferenceFields
Added support for choices with GenericEmbeddedDocumentFields
Fixed Django 1.4 sessions first save data loss
FileField now automatically delete files on .delete()
Fix for GenericReference to_mongo method
Fixed connection regression
Updated Django User document, now allows inheritance
4.77. Changes in 0.6.7¶
Fixed indexing on ‘_id’ or ‘pk’ or ‘id’
Invalid data from the DB now raises a InvalidDocumentError
Cleaned up the Validation Error - docs and code
Added meta
auto_create_indexso you can disable index creationAdded write concern options to inserts
Fixed typo in meta for index options
Bug fix Read preference now passed correctly
Added support for File like objects for GridFS
Fix for #473 - Dereferencing abstracts
4.78. Changes in 0.6.6¶
Django 1.4 fixed (finally)
Added tests for Django
4.79. Changes in 0.6.5¶
More Django updates
4.80. Changes in 0.6.4¶
Refactored connection / fixed replicasetconnection
Bug fix for unknown connection alias error message
Sessions support Django 1.3 and Django 1.4
Minor fix for ReferenceField
4.81. Changes in 0.6.3¶
Updated sessions for Django 1.4
Bug fix for updates where listfields contain embedded documents
Bug fix for collection naming and mixins
4.82. Changes in 0.6.2¶
Updated documentation for ReplicaSet connections
Hack round _types issue with SERVER-5247 - querying other arrays may also cause problems.
4.83. Changes in 0.6.1¶
Fix for replicaSet connections
4.84. Changes in 0.6¶
Added FutureWarning to inherited classes not declaring ‘allow_inheritance’ as the default will change in 0.7
Added support for covered indexes when inheritance is off
No longer always upsert on save for items with a ‘_id’
Error raised if update doesn’t have an operation
DeReferencing is now thread safe
Errors raised if trying to perform a join in a query
Updates can now take __raw__ queries
Added custom 2D index declarations
Added replicaSet connection support
Updated deprecated imports from pymongo (safe for pymongo 2.2)
Added uri support for connections
Added scalar for efficiently returning partial data values (aliased to values_list)
Fixed limit skip bug
Improved Inheritance / Mixin
Added sharding support
Added pymongo 2.1 support
Fixed Abstract documents can now declare indexes
Added db_alias support to individual documents
Fixed GridFS documents can now be pickled
Added Now raises an InvalidDocumentError when declaring multiple fields with the same db_field
Added InvalidQueryError when calling with_id with a filter
Added support for DBRefs in distinct()
Fixed issue saving False booleans
Fixed issue with dynamic documents deltas
Added Reverse Delete Rule support to ListFields - MapFields aren’t supported
Added customisable cascade kwarg options
Fixed Handle None values for non-required fields
Removed Document._get_subclasses() - no longer required
Fixed bug requiring subclasses when not actually needed
Fixed deletion of dynamic data
Added support for the $elementMatch operator
Added reverse option to SortedListFields
Fixed dereferencing - multi directional list dereferencing
Fixed issue creating indexes with recursive embedded documents
Fixed recursive lookup in _unique_with_indexes
Fixed passing ComplexField defaults to constructor for ReferenceFields
Fixed validation of DictField Int keys
Added optional cascade saving
Fixed dereferencing - max_depth now taken into account
Fixed document mutation saving issue
Fixed positional operator when replacing embedded documents
Added Non-Django Style choices back (you can have either)
Fixed __repr__ of a sliced queryset
Added recursive validation error of documents / complex fields
Fixed breaking during queryset iteration
Added pre and post bulk-insert signals
Added ImageField - requires PIL
Fixed Reference Fields can be None in get_or_create / queries
Fixed accessing pk on an embedded document
Fixed calling a queryset after drop_collection now recreates the collection
Add field name to validation exception messages
Added UUID field
Improved efficiency of .get()
Updated ComplexFields so if required they won’t accept empty lists / dicts
Added spec file for rpm-based distributions
Fixed ListField so it doesnt accept strings
Added DynamicDocument and EmbeddedDynamicDocument classes for expando schemas
4.85. Changes in v0.5.2¶
A Robust Circular reference bugfix
4.86. Changes in v0.5.1¶
Fixed simple circular reference bug
4.87. Changes in v0.5¶
Added InvalidDocumentError - so Document core methods can’t be overwritten
Added GenericEmbeddedDocument - so you can embed any type of embeddable document
Added within_polygon support - for those with mongodb 1.9
Updated sum / average to use map_reduce as db.eval doesn’t work in sharded environments
Added where() - filter to allowing users to specify query expressions as Javascript
Added SequenceField - for creating sequential counters
Added update() convenience method to a document
Added cascading saves - so changes to Referenced documents are saved on .save()
Added select_related() support
Added support for the positional operator
Updated geo index checking to be recursive and check in embedded documents
Updated default collection naming convention
Added Document Mixin support
Fixed queryet __repr__ mid iteration
Added hint() support, so can tell Mongo the proper index to use for the query
Fixed issue with inconsistent setting of _cls breaking inherited referencing
Added help_text and verbose_name to fields to help with some form libs
Updated item_frequencies to handle embedded document lookups
Added delta tracking now only sets / unsets explicitly changed fields
Fixed saving so sets updated values rather than overwrites
Added ComplexDateTimeField - Handles datetimes correctly with microseconds
Added ComplexBaseField - for improved flexibility and performance
Added get_FIELD_display() method for easy choice field displaying
Added queryset.slave_okay(enabled) method
Updated queryset.timeout(enabled) and queryset.snapshot(enabled) to be chainable
Added insert method for bulk inserts
Added blinker signal support
Added query_counter context manager for tests
Added map_reduce method item_frequencies and set as default (as db.eval doesn’t work in sharded environments)
Added inline_map_reduce option to map_reduce
Updated connection exception so it provides more info on the cause.
Added searching multiple levels deep in
DictFieldAdded
DictFieldentries containing strings to use matching operatorsAdded
MapField, similar toDictFieldAdded Abstract Base Classes
Added Custom Objects Managers
Added sliced subfields updating
Added
NotRegisteredexception if dereferencingDocumentnot in the registryAdded a write concern for
save,update,update_oneandget_or_createAdded slicing / subarray fetching controls
Fixed various unique index and other index issues
Fixed threaded connection issues
Added spherical geospatial query operators
Updated queryset to handle latest version of pymongo map_reduce now requires an output.
Added
Document__hash__, __ne__ for picklingAdded
FileFieldoptional size arg for read methodFixed
FileFieldseek and tell methods for reading filesAdded
QuerySet.cloneto support copying querysetsFixed item_frequencies when using name thats the same as a native js function
Added reverse delete rules
Fixed issue with unset operation
Fixed Q-object bug
Added
QuerySet.all_fieldsresets previous .only() and .exclude()Added
QuerySet.excludeAdded django style choices
Fixed order and filter issue
Added
QuerySet.onlysubfield supportAdded creation_counter to
BaseFieldallowing fields to be sorted in the way the user has specified themFixed various errors
Added many tests
4.88. Changes in v0.4¶
Added
GridFSStorageDjango storage backendAdded
FileFieldfor GridFS supportNew Q-object implementation, which is no longer based on Javascript
Added
SortedListFieldAdded
EmailFieldAdded
GeoPointFieldAdded
exactandiexactmatch operators toQuerySetAdded
get_document_or_404andget_list_or_404Django shortcutsAdded new query operators for Geo queries
Added
notquery operatorAdded new update operators:
popandadd_to_setAdded
__raw__query parameterAdded support for custom querysets
Fixed document inheritance primary key issue
Added support for querying by array element position
Base class can now be defined for
DictFieldFixed MRO error that occured on document inheritance
Added
QuerySet.distinct,QuerySet.create,QuerySet.snapshot,QuerySet.timeoutandQuerySet.allSubsequent calls to
connect()now workIntroduced
min_lengthforStringFieldFixed multi-process connection issue
Other minor fixes
4.89. Changes in v0.3¶
Added MapReduce support
Added
contains,startswithandendswithquery operators (and case-insensitive versions that are prefixed with ‘i’)Deprecated fields’
nameparameter, replaced withdb_fieldAdded
QuerySet.onlyfor only retrieving specific fieldsAdded
QuerySet.in_bulk()for bulk querying using idsQuerySets now have arewind()method, which is called automatically when the iterator is exhausted, allowingQuerySets to be reusedAdded
DictFieldAdded
URLFieldAdded
DecimalFieldAdded
BinaryFieldAdded
GenericReferenceFieldAdded
get()andget_or_create()methods toQuerySetReferenceFields may now reference the document they are defined on (recursive references) and documents that have not yet been definedDocumentobjects may now be compared for equality (equal if _ids are equal and documents are of same type)QuerySetupdate methods now have anupsertparameterAdded field name substitution for Javascript code (allows the user to use the Python names for fields in JS, which are later substituted for the real field names)
Qobjects now support regex queryingFixed bug where referenced documents within lists weren’t properly dereferenced
ReferenceFields may now be queried using their _idFixed bug where
EmbeddedDocumentscouldn’t be non-polymorphicqueryset_managerfunctions now accept two arguments – the document class as the first and the queryset as the secondFixed bug where
QuerySet.exec_jsignoredQobjectsOther minor fixes
4.90. Changes in v0.2.2¶
Fixed bug that prevented indexes from being used on
ListFieldsDocument.filter()added as an alias toDocument.__call__()validate()may now be used onEmbeddedDocuments
4.91. Changes in v0.2.1¶
Added a MongoEngine backend for Django sessions
Added
force_inserttoDocument.save()Improved querying syntax for
ListFieldandEmbeddedDocumentFieldAdded support for user-defined primary keys (
_idin MongoDB)
4.92. Changes in v0.2¶
Added
Qclass for building advanced queriesAdded
QuerySetmethods for atomic updates to documentsFields may now specify
unique=Trueto enforce uniqueness across a collectionAdded option for default document ordering
Fixed bug in index definitions
4.93. Changes in v0.1.3¶
Added Django authentication backend
Added
Document.metasupport for indexes, which are ensured just before querying takes placeA few minor bugfixes
4.94. Changes in v0.1.2¶
Query values may be processed before before being used in queries
Made connections lazy
Fixed bug in Document dictionary-style access
Added
BooleanFieldAdded
Document.reload()method
4.95. Changes in v0.1.1¶
Documents may now use capped collections