クエリ結果の取得

クエリを作成した後、さまざまな取得オプションを指定して、クエリから返される結果をさらに制御できます。アプリに対するクエリの構成について詳しくは、データストア クエリをご覧ください。

単一のエンティティを取得する

クエリと一致する単一のエンティティを取得するには、メソッド 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() メソッドを使用します。

クエリに上限を設定する

クエリに対して上限を設定することで、1 つのバッチで返される結果の最大数を制御できます。次の例では、最も背の高い 5 名を 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 の App Engine スタンダード環境