From 1b80193aac08f176debdab759accaca96048c283 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Mon, 20 Aug 2012 17:50:18 +0100 Subject: [PATCH] Added example of indexing embedded fields MongoEngine/mongoengine#75 --- docs/changelog.rst | 3 ++- docs/guide/defining-documents.rst | 11 ++++++++--- tests/test_document.py | 26 +++++++++++++++++++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index e92f3432..2feda743 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,7 +4,8 @@ Changelog Changes in 0.7.X ================= -- Fixed ImageField resizing when forcing size +- Added example of indexing embedded document fields (MongoEngine/mongoengine#75) +- Fixed ImageField resizing when forcing size (MongoEngine/mongoengine#80) - Add flexibility for fields handling bad data (MongoEngine/mongoengine#78) - Embedded Documents no longer handle meta definitions - Use weakref proxies in base lists / dicts (MongoEngine/mongoengine#74) diff --git a/docs/guide/defining-documents.rst b/docs/guide/defining-documents.rst index b4facbda..6c8b29e9 100644 --- a/docs/guide/defining-documents.rst +++ b/docs/guide/defining-documents.rst @@ -467,11 +467,16 @@ If a dictionary is passed then the following options are available: :attr:`unique` (Default: False) Whether the index should be sparse. +.. note :: + + To index embedded files / dictionary fields use 'dot' notation eg: + `rank.title` + .. warning:: - - Inheritance adds extra indices. - If don't need inheritance for a document turn inheritance off - see :ref:`document-inheritance`. + Inheritance adds extra indices. + If don't need inheritance for a document turn inheritance off - + see :ref:`document-inheritance`. Geospatial indexes diff --git a/tests/test_document.py b/tests/test_document.py index d4b2673c..a4644641 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -740,6 +740,30 @@ class DocumentTest(unittest.TestCase): self.assertEqual(Person.objects.get(name="Jack").rank, "Corporal") self.assertEqual(Person.objects.get(name="Fred").rank, "Private") + def test_embedded_document_index_meta(self): + """Ensure that embedded document indexes are created explicitly + """ + class Rank(EmbeddedDocument): + title = StringField(required=True) + + class Person(Document): + name = StringField(required=True) + rank = EmbeddedDocumentField(Rank, required=False) + + meta = { + 'indexes': [ + 'rank.title', + ], + } + + Person.drop_collection() + + # Indexes are lazy so use list() to perform query + list(Person.objects) + info = Person.objects._collection.index_information() + info = [value['key'] for key, value in info.iteritems()] + self.assertTrue([('rank.title', '1')] in info) + def test_explicit_geo2d_index(self): """Ensure that geo2d indexes work when created via meta[indexes] """ @@ -770,7 +794,7 @@ class DocumentTest(unittest.TestCase): tags = ListField(StringField()) meta = { 'indexes': [ - { 'fields': ['-date'], 'unique': True, + {'fields': ['-date'], 'unique': True, 'sparse': True, 'types': False }, ], }