【发布时间】:2012-12-27 12:41:04
【问题描述】:
我正在尝试按 ID 查询实体,但不包括其父 ID。
这里有一些代码可以帮助解释:
class Book(ndb.Model):
...
class User(ndb.Model):
...
class Review(ndb.Model):
...
当我创建Review 对象时,我将它们的父级设置为用户,并且它们的 ID 与图书 ID 相同:
review = Review(key=ndb.Key('Review', book.key.id(), parent=user.key))
现在我想通过查询了解每本书有多少评论。由于父 ID 不同,因此无法通过完整键进行查询。
我目前使用的解决方法是将图书 ID 存储在 ndb.KeyProperty 或 ndb.IntegerProperty 中,但这实际上是多余的信息,因为评论的 ID 已经相同。
有没有办法只通过键 ID 进行查询,不包括父 ID?
【问题讨论】:
-
我不认为有官方方式。存储参考属性是个好主意,您可以获得书评,例如:book.reviews。另外,为什么将父母设置为用户而不是书?如果你想删除一本书及其所有评论,你会怎么做?
-
@JimmyKane 书评示例只是我正在做的事情的精简版;我需要这样的父子关系,因为我的应用在一个事务中编辑了很多“评论”,所以它需要锁定用户的实体组才能工作。
-
锁定用户的实体组,例如确保用户没有被删除或类似的东西?
-
为什么会有 XG 交易?只有存在父级时,您才能通过 ID 获取实体。您需要父密钥,或者您可以发布实体密钥。您的选择
-
@JimmyKane XG 事务不适用于超过 5 个实体组,或者至少效果不佳,上次我尝试它比单组事务慢得多。此外,只要我将所有评论保存在一个实体组中,数据存储区就会在一次 API 调用中更新所有评论。
标签: google-app-engine app-engine-ndb