Added average to QuerySet
This commit is contained in:
parent
30d4a0379f
commit
e9254f471f
@ -231,6 +231,24 @@ class QuerySet(object):
|
||||
"""
|
||||
return self.exec_js(sum_func, field)
|
||||
|
||||
def average(self, field):
|
||||
"""Average over the values of the specified field.
|
||||
"""
|
||||
average_func = """
|
||||
function(averageField) {
|
||||
var total = 0.0;
|
||||
var num = 0;
|
||||
db[collection].find(query).forEach(function(doc) {
|
||||
if (doc[averageField]) {
|
||||
total += doc[averageField];
|
||||
num += 1;
|
||||
}
|
||||
});
|
||||
return total / num;
|
||||
}
|
||||
"""
|
||||
return self.exec_js(average_func, field)
|
||||
|
||||
def item_frequencies(self, list_field, normalize=False):
|
||||
"""Returns a dictionary of all items present in a list field across
|
||||
the whole queried set of documents, and their corresponding frequency.
|
||||
|
@ -220,6 +220,19 @@ class QuerySetTest(unittest.TestCase):
|
||||
|
||||
BlogPost.drop_collection()
|
||||
|
||||
def test_average(self):
|
||||
"""Ensure that field can be averaged correctly.
|
||||
"""
|
||||
ages = [23, 54, 12, 94, 27]
|
||||
for i, age in enumerate(ages):
|
||||
self.Person(name='test%s' % i, age=age).save()
|
||||
|
||||
avg = float(sum(ages)) / len(ages)
|
||||
self.assertAlmostEqual(int(self.Person.objects.average('age')), avg)
|
||||
|
||||
self.Person(name='ageless person').save()
|
||||
self.assertEqual(int(self.Person.objects.average('age')), avg)
|
||||
|
||||
def test_sum(self):
|
||||
"""Ensure that field can be summed over correctly.
|
||||
"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user