擷取查詢結果

建構查詢後,您可以指定一系列的擷取選項,進一步控管查詢所傳回的結果。如要進一步瞭解如何建構應用程式的查詢,請參閱資料儲存庫查詢

擷取單一實體

如果只想擷取與查詢相符的單一實體,請使用 PreparedQuery.asSingleEntity() 方法:

Java 8

Query q =
    new Query("Person")
        .setFilter(new FilterPredicate("lastName", FilterOperator.EQUAL, targetLastName));

PreparedQuery pq = datastore.prepare(q);
Entity result = pq.asSingleEntity();

Java 7

Query q =
    new Query("Person")
        .setFilter(new FilterPredicate("lastName", FilterOperator.EQUAL, targetLastName));

PreparedQuery pq = datastore.prepare(q);
Entity result = pq.asSingleEntity();

這會傳回第一個在索引中找到,且與查詢相符的結果。(若有多個相符的結果,則會拋出一個 TooManyResultsException。)

迭代查詢結果

當使用 PreparedQuery.asIterable()PreparedQuery.asIterator() 方法經由查詢的結果進行迭代時,Cloud Datastore 會分批擷取結果。每批預設會有 20 個結果,但您可使用 FetchOptions.chunkSize() 變更這個值。您可以繼續反覆查詢查詢結果,直到傳回所有結果或是要求逾時為止。

從實體上擷取所選的屬性

如果只要擷取實體的部分屬性 (而非整個實體),請使用投影查詢。相較於傳回完整的實體,這類查詢執行速度較快,費用也較低。

同樣的,純金鑰查詢只會將相符實體的金鑰傳回,而非傳回完整的實體本身,藉此節省時間和資源。若要建立此類型的查詢,請使用 Query.setKeysOnly() 方法:

設定查詢限制

您可以指定查詢的「限制」,以此控管一批次傳回的結果上限數量。下列範例會從 Cloud Datastore 中擷取五位身高最高的人:

Java 8

private List<Entity> getTallestPeople() {
  DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

  Query q = new Query("Person").addSort("height", SortDirection.DESCENDING);

  PreparedQuery pq = datastore.prepare(q);
  return pq.asList(FetchOptions.Builder.withLimit(5));
}

Java 7

private List<Entity> getTallestPeople() {
  DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

  Query q = new Query("Person").addSort("height", SortDirection.DESCENDING);

  PreparedQuery pq = datastore.prepare(q);
  return pq.asList(FetchOptions.Builder.withLimit(5));
}

相關資源

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Java 8 適用的 App Engine 標準環境