2014-03-05 66 views
3

我試圖找出一種優雅的方式來查詢具有特定屬性的AppEngine數據存儲中的所有實體。由於缺乏屬性的實體不包含在索引中,因此基本上我想要做的是檢索給定屬性的索引。我確信有可能做類似的事情:具有給定屬性的所有實體的AppEngine數據存儲查詢(Java)

Filter bigger = new FilterPredicate(PROPERTY, 
        FilterOperator.GREATER_THAN_OR_EQUAL, 
        0); 

Filter smaller = new FilterPredicate(PROPERTY, 
        FilterOperator.LESS_THAN_OR_EQUAL, 
        0); 

Filter present = CompositeFilterOperator.or(bigger, smaller); 

Query q = new Query(KIND).setFilter(present); 

但它看起來不是一個非常優雅(或高效)的解決方案。有沒有人有更好的主意?

回答

2

我感興趣的屬性實際上是一個可能有很多值的列表,所以我決定讓它保持未索引狀態,並添加一個單獨的布爾屬性HAS_LIST。這允許我以稍微大一點的實體爲代價對結果進行單個查詢。仍然不是一個非常優雅的解決方案,但可能效率更高一點。

3

如果您不需要空值的實體,您可以使用此:

Filter filter = new FilterPredicate(PROPERTY, FilterOperator.NOT_EQUAL, null); 

它可能看起來簡單,但NOT_EQUAL過濾器實際上導致兩個單獨的查詢 - 就像你的解決方案,除非應用程序引擎對空值很聰明 - 我不知道。

相關問題