Получить список всех уникальных тегов, используемых в наборе объектов - PullRequest
1 голос
/ 21 августа 2011

У меня есть две модели: Group и Item. Item имеет список тегов и принадлежит Group.

class Group(db.Model):
    name = db.StringProperty()

class Item(db.Model):
    title = db.StringProperty()
    tags = db.StringListProperty()
    group = db.ReferenceProperty(Group)

Пока что типичными действиями являются добавление тега к Item, удаление тега из Item и отображение всех Item s, соответствующих данному Group и тегу.

Какой хороший способ получить список всех уникальных тегов, используемых в Group?

В идеале я хотел бы иметь свойство в Group, которое отражает используемые теги:

class Group(db.Model):
    name = db.StringProperty()
    aggregated_tags = db.StringListProperty()

Было бы еще лучше, если бы в это число входило Item с этим тегом.

Постоянная согласованность не является обязательной, то есть хорошо, если агрегированный список тегов не соответствует фактическому списку используемых тегов, если они в конечном итоге становятся согласованными.

Item и Group не относятся к одной и той же группе сущностей, поэтому у меня не может быть транзакции, которая обновляет Item и Group одновременно.

1 Ответ

0 голосов
/ 22 августа 2011

Лучший способ сделать это - сохранить это самостоятельно.Обновляйте список тегов всякий раз, когда вы добавляете или удаляете один из элементов.Вы можете сделать это в задаче очереди задач, если вы хотите сделать это асинхронно.

В качестве альтернативы, вы могли бы написать mapreduce, который вы запускаете периодически, который пересчитывает набор тегов для каждой группы - на самом деле, это в значительной степениклассический вариант использования mapreduce.

...