2017-08-23 246 views

回答

1

類似於 - WHERE color IN('RED', 'BLACK')的查詢,Datastore(服務器端)不支持該查詢。 OR運營商也是如此(例如WHERE color='RED' OR color='BLACK')。某些客戶端API通過將查詢拆分爲多個併合並每個查詢的結果來添加了此功能。新的google-cloud-java API不支持這一點。目前,您必須針對IN子句中的每個值運行多個查詢併合並結果。

+0

或者在可能的情況下使用批處理查詢而不是查詢。 –

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(...)

+0

它適用於新的數據存儲區API嗎? –

+0

那麼文檔仍然是一樣的,所以我猜測是的。 – Y2H

+0

該文檔適用於標準環境而不是靈活的:-( –

相關問題