From 9f98025b8c13d9e845f5de68e29e825f5517b245 Mon Sep 17 00:00:00 2001 From: Harry Marr Date: Sun, 25 Jul 2010 15:29:02 +0100 Subject: [PATCH] Added QuerySet.distinct. Closes #44. --- mongoengine/queryset.py | 9 +++++++++ tests/queryset.py | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index f81adb5c..1e42cd1d 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -604,6 +604,15 @@ class QuerySet(object): # Integer index provided elif isinstance(key, int): return self._document._from_son(self._cursor[key]) + + def distinct(self, field): + """Return a list of distinct values for a given field. + + :param field: the field to select distinct values from + + .. versionadded:: 0.4 + """ + return self._collection.distinct(field) def only(self, *fields): """Load only a subset of this document's fields. :: diff --git a/tests/queryset.py b/tests/queryset.py index 0424d323..3691d89e 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -970,6 +970,16 @@ class QuerySetTest(unittest.TestCase): self.Person(name='ageless person').save() self.assertEqual(int(self.Person.objects.sum('age')), sum(ages)) + def test_distinct(self): + """Ensure that the QuerySet.distinct method works. + """ + self.Person(name='Mr Orange', age=20).save() + self.Person(name='Mr White', age=20).save() + self.Person(name='Mr Orange', age=30).save() + self.assertEqual(self.Person.objects.distinct('name'), + ['Mr Orange', 'Mr White']) + self.assertEqual(self.Person.objects.distinct('age'), [20, 30]) + def test_custom_manager(self): """Ensure that custom QuerySetManager instances work as expected. """