Added example of indexing embedded fields

MongoEngine/mongoengine#75
This commit is contained in:
Ross Lawley 2012-08-20 17:50:18 +01:00
parent be8d39a48c
commit 1b80193aac
3 changed files with 35 additions and 5 deletions

View File

@ -4,7 +4,8 @@ Changelog
Changes in 0.7.X 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) - Add flexibility for fields handling bad data (MongoEngine/mongoengine#78)
- Embedded Documents no longer handle meta definitions - Embedded Documents no longer handle meta definitions
- Use weakref proxies in base lists / dicts (MongoEngine/mongoengine#74) - Use weakref proxies in base lists / dicts (MongoEngine/mongoengine#74)

View File

@ -467,11 +467,16 @@ If a dictionary is passed then the following options are available:
:attr:`unique` (Default: False) :attr:`unique` (Default: False)
Whether the index should be sparse. Whether the index should be sparse.
.. note ::
To index embedded files / dictionary fields use 'dot' notation eg:
`rank.title`
.. warning:: .. warning::
Inheritance adds extra indices.
Inheritance adds extra indices. If don't need inheritance for a document turn inheritance off -
If don't need inheritance for a document turn inheritance off - see :ref:`document-inheritance`. see :ref:`document-inheritance`.
Geospatial indexes Geospatial indexes

View File

@ -740,6 +740,30 @@ class DocumentTest(unittest.TestCase):
self.assertEqual(Person.objects.get(name="Jack").rank, "Corporal") self.assertEqual(Person.objects.get(name="Jack").rank, "Corporal")
self.assertEqual(Person.objects.get(name="Fred").rank, "Private") 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): def test_explicit_geo2d_index(self):
"""Ensure that geo2d indexes work when created via meta[indexes] """Ensure that geo2d indexes work when created via meta[indexes]
""" """
@ -770,7 +794,7 @@ class DocumentTest(unittest.TestCase):
tags = ListField(StringField()) tags = ListField(StringField())
meta = { meta = {
'indexes': [ 'indexes': [
{ 'fields': ['-date'], 'unique': True, {'fields': ['-date'], 'unique': True,
'sparse': True, 'types': False }, 'sparse': True, 'types': False },
], ],
} }