Skip to content

Instantly share code, notes, and snippets.

@hirokiky
Last active December 20, 2015 12:29
Show Gist options
  • Save hirokiky/6131093 to your computer and use it in GitHub Desktop.
Save hirokiky/6131093 to your computer and use it in GitHub Desktop.
MongoDB backend class for a document filter on https://bitbucket.org/knzm/collective/src/default/ch6/docclass.py.
class MongoDBBackend(object):
def __init__(self, db, user):
self.db = db
self.user = user
def inc_feature(self, feature, cat):
"""特徴 feature がカテゴリ cat に出現した回数を 1 増やす"""
features = self.db.features.find({'user': self.user,
'feature': feature,
'category': cat})
if features.count():
self.db.features.update({'user': self.user,
'feature': feature,
'category': cat},
{'$inc': {'count': 1.0}})
else:
self.db.features.insert({'user': self.user,
'feature': feature,
'category': cat,
'count': 1.0})
def inc_category(self, cat):
"""カテゴリ cat が出現した回数を 1 増やす"""
categories = self.db.categories.find({'user': self.user,
'category': cat})
if categories.count():
self.db.categories.update({'user': self.user,
'category': cat},
{'$inc': {'count': 1}})
else:
self.db.categories.insert({'user': self.user,
'category': cat,
'count': 1})
def get_feature_count(self, f, cat):
"""特徴 feature がカテゴリ cat に出現した回数を返す"""
feature = self.db.features.find_one({'user': self.user,
'feature': f,
'category': cat})
if feature:
return float(feature['count'])
else:
return 0.0
def get_cat_count(self, cat):
"""カテゴリ cat が出現した回数を返す"""
category = self.db.categories.find_one({'user': self.user,
'category': cat})
if category:
return category['count']
else:
return 0
def total_count(self):
"""すべてのカテゴリの出現回数を返す"""
r = self.db.categories.aggregate([
{'$group': {'_id': None,
'total': {'$sum': '$count'}}}
])
return r['result'][0]['total']
def categories(self):
"""すべてのカテゴリのリストを返す"""
return map(lambda x: x['category'],
self.db.categories.find({'user': self.user}))
def commit(self):
"""学習結果を保存する"""
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment