jinja2 собирая и считая одни и те же строки

Я хочу собрать те же теги на внешнем интерфейсе или странице просмотра, поступающей из базы данных. Теги накапливаются в списке.

model.py

class Note(Document):
    tags = db.ListField(db.StringField())

Пример данных MongoDB:

"notes" : [ 
        {
            "title":"lipsum",
            "content":"lipsum",
            "tags" : [ 
                "python", 
                "OOP", 
                "mongoengine"
            ]
        }, 

        {
            "title":"lipsum2",
            "content":"lipsum2",
            "tags" : [ 
                "sql", 
                "functional", 
                "mongoengine",
                "python"
            ]
        }

Как я могу получить следующий результат из jinja2, python, flask.ext или самого mongoengine?

mongoengine 2
OOP
functional
python 2
sql

Спасибо за ваши предложения.

1 ответ

Монго двигатель QuerySet.distinct а также QuerySet.count функции могут быть вашими друзьями здесь:

tag_counts = {}
tag_names = Note.objects.distinct('tags')
for tag in tag_names:
    tag_counts [tag] = Note.objects(tags=tag).count()

или в одну строку:

dict([(tag, Note.objects(tags=tag).count()) for tag in Note.objects.distinct('tags')])

Они оба составляют этот словарь:

{'OOP':1, 'mongoengine':2 ,'python': 2, 'functional':1, 'sql':1}
Другие вопросы по тегам