获取一组实体中使用的所有唯一标记的列表

时间:2011-08-20 23:21:08

标签: google-app-engine gql

我有两个模型:GroupItemItem有一个标记列表,属于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匹配的所有Group和标记

获取Group中使用的所有唯一标记列表的好方法是什么?

理想情况下,我希望在Group中有一个反映所用标签的属性:

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

如果这包含具有此标记的Item个数,那就更好了。

永久一致性不是必需的,即如果聚合的标签列表与实际使用的标签列表不匹配,只要它们最终变得一致就没问题。

ItemGroup不在同一个实体组中,因此我无法同时更新ItemGroup的交易。

1 个答案:

答案 0 :(得分:0)

这样做的最佳方法是自己维护它。无论何时在项目中添加或删除标签,都要更新标签列表。如果要异步执行,可以在任务队列任务中执行此操作。

或者,您可以编写一个mapreduce,定期运行,重新计算每个组的标记集 - 事实上,这几乎是mapreduce的经典用例。

相关问题