使用 IN 运算符的数据存储区查询
Datastore query with IN operator
在 运行 查询时,新的灵活环境数据存储接口似乎不支持 IN
操作。我希望我是错的,如果是这样,如何在 Datastore 的新 Java 界面中使用 IN
运算符?
Datastore(服务器端)不支持类似 - WHERE color IN('RED', 'BLACK')
的查询。 OR
运算符(例如 WHERE color='RED' OR color='BLACK'
)也是如此。一些客户 API 通过将查询拆分为多个然后合并每个查询的结果来添加此功能。新的 google-cloud-java API 还不支持这个。现在,您必须对 IN
子句中的每个值进行 运行 多次查询并合并结果。
这是来自 documentation 的示例:
If you want to set more than one filter on a query, you must use CompositeFilter
, which requires at least two filters.
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
。虽然我最近没有自己尝试过,但当前的文档指出它 can 仍然可以用作运算符。根据它,类似下面的代码应该可以工作:
Filter propertyFilter = new FilterPredicate("height", FilterOperator.IN, minHeights);
Query q = new Query("Person").setFilter(propertyFilter);
或者,您可以使用 Google GQL。它将允许您编写类似 SQL 的语法,您可以在其中使用 in(...)
.
在 运行 查询时,新的灵活环境数据存储接口似乎不支持 IN
操作。我希望我是错的,如果是这样,如何在 Datastore 的新 Java 界面中使用 IN
运算符?
Datastore(服务器端)不支持类似 - WHERE color IN('RED', 'BLACK')
的查询。 OR
运算符(例如 WHERE color='RED' OR color='BLACK'
)也是如此。一些客户 API 通过将查询拆分为多个然后合并每个查询的结果来添加此功能。新的 google-cloud-java API 还不支持这个。现在,您必须对 IN
子句中的每个值进行 运行 多次查询并合并结果。
这是来自 documentation 的示例:
If you want to set more than one filter on a query, you must use
CompositeFilter
, which requires at least two filters.
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
。虽然我最近没有自己尝试过,但当前的文档指出它 can 仍然可以用作运算符。根据它,类似下面的代码应该可以工作:
Filter propertyFilter = new FilterPredicate("height", FilterOperator.IN, minHeights);
Query q = new Query("Person").setFilter(propertyFilter);
或者,您可以使用 Google GQL。它将允许您编写类似 SQL 的语法,您可以在其中使用 in(...)
.