使用IN运算符进行数据存储区查询

时间:2017-08-23 09:44:33

标签: java google-cloud-datastore gcloud datastore gcloud-java

新的灵活环境数据存储区界面在运行查询时似乎不支持IN操作。我希望我错了,如果是的话,如何在数据存储区的新Java接口中使用IN运算符?

2 个答案:

答案 0 :(得分:2)

类似于WHERE color IN('RED', 'BLACK')的查询,数据存储区(服务器端)不支持它。 OR运算符的情况也是如此(例如WHERE color='RED' OR color='BLACK')。某些客户端API通过将查询拆分为多个,然后合并每个查询的结果来添加此功能。新的google-cloud-java API尚不支持此功能。现在,您必须为IN子句中的每个值运行多个查询并合并结果。

答案 1 :(得分:0)

以下是documentation

的示例
  

如果要在查询中设置多个过滤器,则必须使用CompositeFilter,这需要至少两个过滤器。

Filter tooShortFilter = new FilterPredicate("height", FilterOperator.LESS_THAN, minHeight);
Filter tooTallFilter = new FilterPredicate("height", FilterOperator.GREATER_THAN, maxHeight);
Filter heightOutOfRangeFilter = CompositeFilterOperator.or(tooShortFilter, tooTallFilter);
Query q = new Query("Person").setFilter(heightOutOfRangeFilter);

您也可以使用.and()。这里的代码适用于Java 7.对于Java 8,您可以在上面引用的文档中找到相应的代码。我希望有所帮助。

现在到IN。虽然我最近没有尝试过,但是当前的文档声明可以仍然可以用作运算符。根据它,类似下面的代码应该工作:

Filter propertyFilter = new FilterPredicate("height", FilterOperator.IN, minHeights);
Query q = new Query("Person").setFilter(propertyFilter);

或者,您可以使用Google GQL。它允许您编写类似SQL的语法,您可以使用in(...)