如何获得一种财产的计数?

时间:2018-07-26 09:16:32

标签: google-app-engine nosql google-cloud-platform google-cloud-datastore

我有一个种类 学生,其中存储了所有学生喜欢的颜色的详细信息。允许他们从三种颜色中选择自己喜欢的颜色:{Red,Blue,Green}

让我们假设有100个学生,我的代码是每个学生都这样:

Entity arya = new Entity("Student","Arya");
arya.setProperty("Color","Red");
Entity robb = new Entity("Student","Robb");
robb.setProperty("Color","Green");
..
..
Entity jon = new Entity("Student","Jon");
jon.setProperty("Color","Blue");

如何找出有多少学生喜欢这种学生种类中的特定颜色(例如红色)?我应该写什么查询来获取计数?

预先感谢

2 个答案:

答案 0 :(得分:1)

您要查找的数字将是查询结果中带有Color属性的相等过滤器的项数。

为此,您可以使用仅键查询(一种特殊的projection query),速度更快且成本更低:

  

仅键查询

     

一个仅键查询(这是一种投影查询)仅返回   结果实体的键,而不是实体本身的键,位于   与检索整个实体相比,延迟和成本更低。

     

...

     

仅键查询是一个很小的操作,仅算作一个查询   实体读取查询本身。

遵循这些原则(但请注意,我不是Java用户,该代码段仅基于文档示例)

Query<Key> query = Query.newKeyQueryBuilder()
    .setKind("Student")
    .setFilter(PropertyFilter.eq("Color", "Red")
    .build();

答案 1 :(得分:0)

我同意Dan Cornilescu的回答。 Here是Datastore API的直接用法。我已经为您的用例准备了请求正文。您可以通过添加项目ID来运行它。这将返回与过滤器匹配的实体,然后您可以计算它们的数量。