我有两个模型: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
匹配的所有Group
和标记
获取Group
中使用的所有唯一标记列表的好方法是什么?
理想情况下,我希望在Group
中有一个反映所用标签的属性:
class Group(db.Model):
name = db.StringProperty()
aggregated_tags = db.StringListProperty()
如果这包含具有此标记的Item
个数,那就更好了。
永久一致性不是必需的,即如果聚合的标签列表与实际使用的标签列表不匹配,只要它们最终变得一致就没问题。
Item
和Group
不在同一个实体组中,因此我无法同时更新Item
和Group
的交易。
答案 0 :(得分:0)
这样做的最佳方法是自己维护它。无论何时在项目中添加或删除标签,都要更新标签列表。如果要异步执行,可以在任务队列任务中执行此操作。
或者,您可以编写一个mapreduce,定期运行,重新计算每个组的标记集 - 事实上,这几乎是mapreduce的经典用例。