0

注意:此示例仅代表问题,并非真实用例

我想知道我是否有某些对象,例如 Car 和 CarCategory:

Owner
     - name
     - age

Car 
     - name
     - brand
     - category( reference )
     - owner ( reference )

CarCategory
     - name
     - property

我可以查询某个字段吗?

例如汽车类别:

query = GqlQuery("SELECT category FROM Car")

我收到此错误:BadQueryError: Parse Error: Expected no additional symbols at symbol Car

更新:如果想要拥有某个用户拥有的所有类别的列表怎么办?

我想以最有效的方式做到这一点。

4

2 回答 2

1

您无法查询 App Engine 数据存储区中的各个字段。实体作为完整的序列化协议缓冲区进行存储和检索,因此无法仅检索某些字段。

鉴于db.Model抽象,也没有明智的方法来表示返回的数据——你不能简单地提供一个只填充一些字段的模型,因为这可能违反约束,如果你尝试存储肯定会造成麻烦它回到数据存储区!

响应您的更新:这通常需要加入和聚合,App Engine 都不支持这两者。您最好的选择是查询和检索所有用户的Car实体,并Category自己按属性进行分类。

于 2011-07-04T01:39:54.840 回答
1

似乎您在这里有比自己排序更多的选择。您可以为每个类别创建一个唯一的 key_name,例如“Bronco”或使用唯一创建的密钥“8HJ876KKL”(可能由 uuid 创建)。然后在 Car 实体中,您可以拥有一个带有类别 key_name 的 StringProperty。如果您希望汽车属于多个类别,则可以将其设为 StringListProperty。然后,您可以通过 key_name 查询类别。

另一种选择是使用 Car 中的 ReferenceProperty 指向 Category 对象。然后,您可以在查找属于某个类别的每辆汽车时查询确切的键。

我不确定在 ReferenceProperty、StringProperty 和 StringListProperty 上查询的效率如何。

于 2013-08-11T05:47:55.770 回答