Tweaks to item_frequencies
Updated to use a ternary statement and added tests Refs #124 #122 Thanks to @nickvlku for the code.
This commit is contained in:
parent
2ce70448b0
commit
60c8254f58
@ -1298,19 +1298,11 @@ class QuerySet(object):
|
|||||||
db[collection].find(query).forEach(function(doc) {
|
db[collection].find(query).forEach(function(doc) {
|
||||||
if (doc[field].constructor == Array) {
|
if (doc[field].constructor == Array) {
|
||||||
doc[field].forEach(function(item) {
|
doc[field].forEach(function(item) {
|
||||||
var preValue = 0;
|
frequencies[item] = inc + (isNaN(frequencies[item]) ? 0: frequencies[item]);
|
||||||
if (!isNaN(frequencies[item])) {
|
|
||||||
preValue = frequencies[item];
|
|
||||||
}
|
|
||||||
frequencies[item] = inc + preValue;
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var item = doc[field];
|
var item = doc[field];
|
||||||
var preValue = 0;
|
frequencies[item] = inc + (isNaN(frequencies[item]) ? 0: frequencies[item]);
|
||||||
if (!isNaN(frequencies[item])) {
|
|
||||||
preValue = frequencies[item];
|
|
||||||
}
|
|
||||||
frequencies[item] = inc + preValue;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return frequencies;
|
return frequencies;
|
||||||
|
@ -1339,7 +1339,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
BlogPost.drop_collection()
|
BlogPost.drop_collection()
|
||||||
|
|
||||||
BlogPost(hits=1, tags=['music', 'film', 'actors', 'watch']).save()
|
BlogPost(hits=1, tags=['music', 'film', 'actors', 'watch']).save()
|
||||||
BlogPost(hits=2, tags=['music']).save()
|
BlogPost(hits=2, tags=['music', 'watch']).save()
|
||||||
BlogPost(hits=2, tags=['music', 'actors']).save()
|
BlogPost(hits=2, tags=['music', 'actors']).save()
|
||||||
|
|
||||||
f = BlogPost.objects.item_frequencies('tags')
|
f = BlogPost.objects.item_frequencies('tags')
|
||||||
@ -1347,20 +1347,23 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(set(['music', 'film', 'actors', 'watch']), set(f.keys()))
|
self.assertEqual(set(['music', 'film', 'actors', 'watch']), set(f.keys()))
|
||||||
self.assertEqual(f['music'], 3)
|
self.assertEqual(f['music'], 3)
|
||||||
self.assertEqual(f['actors'], 2)
|
self.assertEqual(f['actors'], 2)
|
||||||
|
self.assertEqual(f['watch'], 2)
|
||||||
self.assertEqual(f['film'], 1)
|
self.assertEqual(f['film'], 1)
|
||||||
|
|
||||||
# Ensure query is taken into account
|
# Ensure query is taken into account
|
||||||
f = BlogPost.objects(hits__gt=1).item_frequencies('tags')
|
f = BlogPost.objects(hits__gt=1).item_frequencies('tags')
|
||||||
f = dict((key, int(val)) for key, val in f.items())
|
f = dict((key, int(val)) for key, val in f.items())
|
||||||
self.assertEqual(set(['music', 'actors']), set(f.keys()))
|
self.assertEqual(set(['music', 'actors', 'watch']), set(f.keys()))
|
||||||
self.assertEqual(f['music'], 2)
|
self.assertEqual(f['music'], 2)
|
||||||
self.assertEqual(f['actors'], 1)
|
self.assertEqual(f['actors'], 1)
|
||||||
|
self.assertEqual(f['watch'], 1)
|
||||||
|
|
||||||
# Check that normalization works
|
# Check that normalization works
|
||||||
f = BlogPost.objects.item_frequencies('tags', normalize=True)
|
f = BlogPost.objects.item_frequencies('tags', normalize=True)
|
||||||
self.assertAlmostEqual(f['music'], 3.0/7.0)
|
self.assertAlmostEqual(f['music'], 3.0/8.0)
|
||||||
self.assertAlmostEqual(f['actors'], 2.0/7.0)
|
self.assertAlmostEqual(f['actors'], 2.0/8.0)
|
||||||
self.assertAlmostEqual(f['film'], 1.0/7.0)
|
self.assertAlmostEqual(f['watch'], 2.0/8.0)
|
||||||
|
self.assertAlmostEqual(f['film'], 1.0/8.0)
|
||||||
|
|
||||||
# Check item_frequencies works for non-list fields
|
# Check item_frequencies works for non-list fields
|
||||||
f = BlogPost.objects.item_frequencies('hits')
|
f = BlogPost.objects.item_frequencies('hits')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user