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

发布于 2024-12-01 00:34:00 字数 1008 浏览 1 评论 0原文

我有两个模型: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 匹配的所有 Item。代码>组和标签。

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

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

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

如果包含具有此标签的 Item 数量,那就更好了。

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

ItemGroup 不在同一个实体组中,因此我无法进行更新 ItemGroup 的事务 同时。

I've got two models: Group and Item. An Item has a list of tags and belongs to a Group.

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

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

So far, typical actions are adding a tag to an Item, removing a tag from an Item, and showing all Items matching a given Group and tag.

What's a good way for getting a list of all unique tags used within a Group?

Ideally I'd like to have a property in Group that reflects the tags used:

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

It would be even better if this included the number of Items that have this tag.

Permanent consistency is not a requirement, i.e. it is fine if the aggregated list of tags does not match the actual list of tags in use, as long as they become consistent eventually.

Item and Group are not in the same entity group, so I can't have a transaction that updates the Item and the Group at the same time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

下雨或天晴 2024-12-08 00:34:00

最好的方法是自己维护。每当您在项目中添加或删除标签时,都会更新标签列表。如果您想异步执行此操作,可以在任务队列任务中执行此操作。

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

The best way to do this is to maintain it yourself. Update the list of tags whenever you add or remove one from an item. You can do this in a task queue task if you want to do it asynchronously.

Alternatively, you could write a mapreduce that you run periodically that recalculates the tag set for every group - in fact, this is pretty much a classic use-case for mapreduce.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文