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_save
so you can enable index creation onsave()
(as it was < 0.26.0).BREAKING CHANGE: remove deprecated method
ensure_index
(replaced bycreate_index
long time ago).Addition of Decimal128Field:
Decimal128Field
for 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
choices
limits 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_reduce
has been migrated fromCollection.map_reduce
andCollection.inline_map_reduce
to usedb.command({mapReduce: ..., ...})
and support between the two may need additional verification.UUIDs are encoded with the
pythonLegacy
encoding by default instead of the newer and cross platformstandard
encoding. 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_options
has been provided.Queryset.count
has been usingCollection.count_documents
and transparently falling back toCollection.count
when using features that are not supported byCollection.count_documents
.Collection.count
has 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.EnumField
Refactoring - 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_indexes
andQueryset.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.aggregate
method was changed, it no longer takes an unpacked list of pipeline steps (*pipeline) but simply takes the pipeline list just like
pymongo.Collection.aggregate
does. #2079
- DEPRECATION: The interface of
4.19. Changes in 0.19.0¶
- BREAKING CHANGE:
class_check
andread_preference
keyword 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_query
attribute to_cls_query
.
- BREAKING CHANGE:
BREAKING CHANGE: Removed the deprecated
format
param fromQuerySet.explain
. #2113- BREAKING CHANGE: Renamed
MongoEngineConnectionError
toConnectionFailure
. #2111 If you catch/use
MongoEngineConnectionError
in 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
LazyReferenceField
is now stored in the_data
field of its parent as aDBRef
,Document
, orEmbeddedDocument
(ObjectId
is no longer allowed). #2182- DEPRECATION:
Q.empty
&QNode.empty
are 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").empty
usenot Q(name="John")
.
- DEPRECATION:
Fix updating/modifying/deleting/reloading a document that’s sharded by a field with
db_field
specified. #2125Only set no_cursor_timeout when requested (fixes an incompatibility with MongoDB 4.2) #2148
ListField
now accepts an optionalmax_length
parameter. #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.save
to 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_mongo
inDocument.save
. #2049- Connection/disconnection improvements:
Expose
mongoengine.connection.disconnect
andmongoengine.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
connect
fails immediately when db name contains invalid characters. #2031 #1718
Fix the default write concern of
Document.save
that was overwriting the connection write concern. #568Fix querying on
List(EmbeddedDocument)
subclasses fields. #1961 #1492Fix querying on
(Generic)EmbeddedDocument
subclasses fields. #475Fix
QuerySet.aggregate
so that it takes limit and skip value into account. #2029Generate unique indices for
SortedListField
andEmbeddedDocumentListFields
. #2020BREAKING CHANGE: Changed the behavior of a custom field validator (i.e
validation
parameter of aField
). It is now expected to raise aValidationError
instead of returningTrue
/False
. #2050- BREAKING CHANGES (associated with connection/disconnection fixes):
Calling
connect
2 times with the same alias and different parameter will raise an error (should calldisconnect
first).disconnect
now clearsmongoengine.connection._connection_settings
.disconnect
now clears the cached attributeDocument._collection
.
BREAKING CHANGE:
EmbeddedDocument.save
&.reload
no 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
&.reload
are marked as deprecated and will be removed in a next version of MongoEngine. #1552Fix
QuerySet.only
working improperly after usingQuerySet.count
of the same instance of aQuerySet
.Fix
batch_size
that was not copied when cloning aQuerySet
object. #2011Fix
InvalidStringData
error when usingmodify
on 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
$push
with the$position
operator not working with lists in embedded documents. #1965
4.25. Changes in 0.16.2¶
Fix
Document.save
that fails when called withwrite_concern=None
(regression of 0.16.1). #1958
4.26. Changes in 0.16.1¶
Fix
_cls
that is not set properly in theDocument
constructor (regression). #1950Fix a bug in the
_delta
method - update of aListField
depends on an unrelated dynamic field update. #1733Remove PyMongo’s deprecated
Collection.save
method and useCollection.insert_one
instead. #1899
4.27. Changes in 0.16.0¶
- POTENTIAL BREAKING CHANGES:
EmbeddedDocumentField
will no longer accept references to Document classes in its constructor. #1661Get rid of the
basecls
parameter from theDictField
constructor (dead code). #1876Default value of the
ComplexDateTime
field is nowNone
(and no longer the current datetime). #1368
Fix an unhashable
TypeError
when referencing aDocument
with a compound key in anEmbeddedDocument
. #1685Fix a bug where an
EmbeddedDocument
with the same id as its parent would not be tracked for changes. #1768Fix the fact that a bulk
QuerySet.insert
was 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_validation
to be taken into account. #1202Replace MongoDB v2.4 tests in Travis CI with MongoDB v3.2. #1903
Fix side effects of using
QuerySet.no_dereference
on other documents. #1677Fix
TypeError
when using lazy Django translation objects as translated choices. #1879Improve Python 2-3 codebase compatibility. #1889
Fix support for changing the default value of the
ComplexDateTime
field. #1368Improve error message in case an
EmbeddedDocumentListField
receives anEmbeddedDocument
instance instead of a list. #1877Fix the
inc
anddec
operators for theDecimalField
. #1517 #1320Ignore
killcursors
queries inquery_counter
context manager. #1869Fix the fact that
query_counter
was modifying the initial profiling level in case it was != 0. #1870Repair the
no_sub_classes
context manager + fix the fact that it was swallowing exceptions. #1865Fix index creation error that was swallowed by
hasattr
under Python 2. #1688QuerySet.limit
function 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
GenericReferenceField
where 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 mongoengine
performance. #1806Update
GridFSProxy.__str__
so that it would always print both the filename and grid_id. #710Add
__repr__
toQ
andQCombination
classes. #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_one
methods now return anUpdateResult
whenfull_result=True
is provided and no longer a dict. #1491Improve
LazyReferenceField
andGenericLazyReferenceField
with nested fields. #1704Fix the subfield resolve error in
generic_emdedded_document
query. #1651 #1652Use each modifier only with
$position
. #1673 #1675Fix validation errors in the
GenericEmbeddedDocumentField
. #1067Update cached fields when a
fields
argument is given. #1712Add a
db
parameter toregister_connection
for compatibility withconnect
.Use PyMongo v3.x’s
insert_one
andinsert_many
inDocument.insert
. #1491Use PyMongo v3.x’s
update_one
andupdate_many
inDocument.update
andQuerySet.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
LazyReferenceField
andGenericLazyReferenceField
. #1230
4.30. Changes in 0.14.1¶
Remove
SemiStrictDict
and start using a regular dict forBaseDocument._data
. #1630Add support for the
$position
param in the$push
operator. #1566Fix
DateTimeField
interpreting an empty string as today. #1533Add a missing
__ne__
method to theGridFSProxy
class. #1632Fix
BaseQuerySet._fields_to_db_fields
. #1553
4.31. Changes in 0.14.0¶
BREAKING CHANGE: Remove the
coerce_types
param fromQuerySet.as_pymongo
. #1549POTENTIAL BREAKING CHANGE: Make
EmbeddedDocument
not 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_size
chaining. #1476POTENTIAL BREAKING CHANGE: Change a public
QuerySet.clone_into
method to a privateQuerySet._clone_into
. #1476Fix the way
Document.objects.create
works 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
dec
update operator. #1450Add a
rename
update operator. #1454Add validation for the
db_field
parameter. #1448Fix the error message displayed when querying an
EmbeddedDocumentField
by 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
ConnectionError
toMongoEngineConnectionError
since 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 ErrorClass
won’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
DoesNotExist
error. In the past it used to returnNone
. #1334Fix absent rounding for the
DecimalField
whenforce_string
is 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
GenericReferenceField
by anObjectId
and 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/average
for fields w/ an explicitdb_field
. #1417Fix filtering by
embedded_doc=None
. #1422Add support for
Cursor.comment
. #1420Fix
doc.get_<field>_display
methods. #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:
ListField
minus index assignment does not work. #1128Fix cascade delete mixing among collections. #1224
Add
signal_kwargs
argument toDocument.save
,Document.delete
andBaseQuerySet.insert
to be passed to signals calls. #1206Raise
OperationError
when trying to do adrop_collection
on document with no collection set.Fix a bug where a count on
ListField
ofEmbeddedDocumentField
fails. #1187Fix
LongField
values stored as int32 in Python 3. #1253MapField
now handles unicode keys correctly. #1267ListField
now handles negative indicies correctly. #1270Fix an
AttributeError
when initializing anEmbeddedDocument
with positional args. #681Fix a
no_cursor_timeout
error with PyMongo v3.x. #1304Replace map-reduce based
QuerySet.sum/average
with aggregation-based implementations. #1336Fix support for
__
to escape field names that match operators’ names inupdate
. #1351Fix
BaseDocument._mark_as_changed
. #1369Add support for pickling
QuerySet
instances. #1397Fix connecting to a list of hosts. #1389
Fix a bug where accessing broken references wouldn’t raise a
DoesNotExist
error. #1334Fix not being able to specify
use_db_field=False
onListField(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¶
SaveConditionError
is now importable from the top level package. #1165Add a
QuerySet.upsert_one
method. #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
CachedReferenceField
bug when loading cached docs asDBRef
but failing to save them. #1047Fix ignored chained options. #842
Document.save
’ssave_condition
error raises aSaveConditionError
exception. #1070Fix
Document.reload
for theDynamicDocument
. #1050StrictDict
&SemiStrictDict
are shadowed at init time. #1105Fix
ListField
negative 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
elemMatch
operator. #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
authSource
in 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_sum
andBaseQuerySet.aggregate_average
methods.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
EmbeddedDocumentListField
for Lists of Embedded Documents. #826ComplexDateTimeField should fall back to None when null=True #864
Request Support for $min, $max Field update operators #863
BaseDict
does 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.aggregate
wrapper 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
elemMatch
operator as well -match
is 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
id
also 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_value
preview 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=False
in 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_index
so 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
DictField
Added
DictField
entries containing strings to use matching operatorsAdded
MapField
, similar toDictField
Added Abstract Base Classes
Added Custom Objects Managers
Added sliced subfields updating
Added
NotRegistered
exception if dereferencingDocument
not in the registryAdded a write concern for
save
,update
,update_one
andget_or_create
Added 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
FileField
optional size arg for read methodFixed
FileField
seek and tell methods for reading filesAdded
QuerySet.clone
to 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_fields
resets previous .only() and .exclude()Added
QuerySet.exclude
Added django style choices
Fixed order and filter issue
Added
QuerySet.only
subfield supportAdded creation_counter to
BaseField
allowing fields to be sorted in the way the user has specified themFixed various errors
Added many tests
4.88. Changes in v0.4¶
Added
GridFSStorage
Django storage backendAdded
FileField
for GridFS supportNew Q-object implementation, which is no longer based on Javascript
Added
SortedListField
Added
EmailField
Added
GeoPointField
Added
exact
andiexact
match operators toQuerySet
Added
get_document_or_404
andget_list_or_404
Django shortcutsAdded new query operators for Geo queries
Added
not
query operatorAdded new update operators:
pop
andadd_to_set
Added
__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
DictField
Fixed MRO error that occured on document inheritance
Added
QuerySet.distinct
,QuerySet.create
,QuerySet.snapshot
,QuerySet.timeout
andQuerySet.all
Subsequent calls to
connect()
now workIntroduced
min_length
forStringField
Fixed multi-process connection issue
Other minor fixes
4.89. Changes in v0.3¶
Added MapReduce support
Added
contains
,startswith
andendswith
query operators (and case-insensitive versions that are prefixed with ‘i’)Deprecated fields’
name
parameter, replaced withdb_field
Added
QuerySet.only
for only retrieving specific fieldsAdded
QuerySet.in_bulk()
for bulk querying using idsQuerySet
s now have arewind()
method, which is called automatically when the iterator is exhausted, allowingQuerySet
s to be reusedAdded
DictField
Added
URLField
Added
DecimalField
Added
BinaryField
Added
GenericReferenceField
Added
get()
andget_or_create()
methods toQuerySet
ReferenceField
s may now reference the document they are defined on (recursive references) and documents that have not yet been definedDocument
objects may now be compared for equality (equal if _ids are equal and documents are of same type)QuerySet
update methods now have anupsert
parameterAdded 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)
Q
objects now support regex queryingFixed bug where referenced documents within lists weren’t properly dereferenced
ReferenceField
s may now be queried using their _idFixed bug where
EmbeddedDocuments
couldn’t be non-polymorphicqueryset_manager
functions now accept two arguments – the document class as the first and the queryset as the secondFixed bug where
QuerySet.exec_js
ignoredQ
objectsOther minor fixes
4.90. Changes in v0.2.2¶
Fixed bug that prevented indexes from being used on
ListField
sDocument.filter()
added as an alias toDocument.__call__()
validate()
may now be used onEmbeddedDocument
s
4.91. Changes in v0.2.1¶
Added a MongoEngine backend for Django sessions
Added
force_insert
toDocument.save()
Improved querying syntax for
ListField
andEmbeddedDocumentField
Added support for user-defined primary keys (
_id
in MongoDB)
4.92. Changes in v0.2¶
Added
Q
class for building advanced queriesAdded
QuerySet
methods for atomic updates to documentsFields may now specify
unique=True
to 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.meta
support 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
BooleanField
Added
Document.reload()
method
4.95. Changes in v0.1.1¶
Documents may now use capped collections