さまざまな検索の例を以下に示します。
Bucket 内の全 Object の取得
まずは、もっとも単純な検索として Bucket 内の全ての Object を取得する例について説明します。
-
-
ここでは以下の処理が行われています。
KiiClause
を何も指定せずに KiiQuery
インスタンスを作成し、"all" 検索用のクエリインスタンスを作成。
- このクエリインスタンスを、検索対象 Bucket の
query
メソッドに渡して実行。別の方法として、query()
メソッドを null 指定で実行することもできます。
KiiQueryResult
として返却された検索結果を getResult()
メソッドを用いてパース。
Bucket に対して "all" 検索を実施しているため、検索結果には Bucket 内の全ての Object が含まれます。
なお、期待どおりに取得できない場合、スコープの違い もご確認ください。
複数条件の検索
次に、以下の条件で検索を実行する例を取り上げます。
- "gender" フィールドの値が "Female"、かつ "age" フィールドの値が 18 より大きい
- "age" フィールドの昇順で検索結果をソート。
- 一度の検索実行で取得する検索結果の最大件数を 10 件に設定。
-
-
ここでは以下の処理が行われています。
equals()
メソッドと greaterThan()
メソッドを用いて個々の検索条件を定義。さらにこれらの検索条件を and()
メソッドで結合した KiiClause
インスタンスを用いて KiiQuery
インスタンスを作成。
KiiQuery
インスタンスの sortByAsc()
メソッドを実行して、ソート順序を指定。
KiiQuery
インスタンスの setLimit()
メソッドを実行して、一度に取得する検索結果の最大件数を指定。
KiiQuery
インスタンスを指定して検索対象 Bucket の query()
メソッドを実行し、検索を実施。
KiiQueryResult
インスタンスとして返却された検索結果を getResult()
メソッドを用いてパース。
今回の例では、ページネーションを考慮した検索結果のパースを行っています。
- 検索結果のパース終了後、
KiiQueryResult
インスタンスの hasNext()
メソッドを実行して、未取得の検索結果が存在するか確認。
- もし未取得の検索結果が存在する場合は、
getNextQueryResult()
メソッドを実行して、次の検索結果 10 件を含む KiiQueryResult
インスタンスを取得。
位置情報による検索
次に、位置情報に基づく Object 検索を行う例を挙げます。
まず、以下のように "location" というフィールドに GeoPoint を持つ Object が存在するものとします。
-
-
GeoBox(長方形エリア)による Object 検索を行うには、以下の様な処理を行います。
-
-
この例のように、GeoBox の検索条件は北東点と南西点を表す GeoPoint を指定して geoBox()
メソッドを実行することにより定義します。
次に、GeoDistance(円エリア)による Object 検索を行う処理例を以下に示します。この例では 2 つの GeoDistance を定義しており、これら 2 つの GeoDistance が交わるエリアにマッチする Object を検索しています。また、検索結果を片方の GeoDistance の中心点より近い順にソートしています。
-
-
ここでは以下の処理が行われています。
- 中心点を表す GeoPoint、半径(メートル)、中心点からの距離格納用フィールド(オプショナル)を指定して
geoDistance()
メソッドを実行し、GeoDistance の検索条件を定義。
- 2 つの GeoDistance を
and()
メソッドで結合した KiiClause
インスタンスを用いて KiiQuery
インスタンスを作成。
KiiQuery
インスタンスの sortByAsc()
メソッドを実行して、ソート順序を指定。
KiiQuery
インスタンスを指定して検索対象 Bucket の query()
メソッドを実行し、検索を実施。
KiiQueryResult
インスタンスとして返却された検索結果を getResult()
メソッドを用いてパース。
GeoDistance による検索を行った場合、検索にマッチした Object のそれぞれに対して、中心点からの距離(メートル)を Kii Cloud にセットさせることができます。今回の例では、GeoDistance1 の中心点からの距離を Kii Cloud にセットさせています。
- 距離は、
geoDistance()
メソッド実行時に指定した距離格納用フィールドにセットされます。
- この距離を用いてソートを行う場合は、例のように "_calculated." の後に距離格納用フィールド名をアペンドした文字列を
sortByAsc()
メソッドに指定します。
- 検索結果より距離を取得するには、例のように Object の "_calculated" フィールドを
getJSONObject()
メソッドで取得し、さらに getDouble()
メソッドを実行して距離格納用フィールドより距離を取得します。
所定キーによる検索
次に、所定キーを検索条件に使った検索の例を挙げます。
次のコードでは、ログイン中のユーザーによって作成された Object のうち、更新されていないものと 1 日以内に作成されたものの両方を取得する条件で検索しています。ユーザー ID や作成日時はここに示すような方法で比較できます。
-
-
特定のフィールド名および型による検索
特定のフィールド名および型を指定した検索の例を挙げます。Object にはさまざまなカスタムフィールドを持たせることができ、名前と型が必ずしも一様ではなくなる可能性があります。hasField
句で検索対象を絞り込み、特定の型のフィールドを持つ Object のみを取得できます。
次のサンプルコードでは、省略可能な promotionalCode
フィールドを持つ Object のみを取得します。
-
-
Not 句による検索
Not 句による検索の例を挙げます。長方形のエリアを指定して、その外部に位置する Object を検索します。
-
-
not を含むクエリーでは、パフォーマンスが低下することがありますが、式の変形によって not の使用を回避できる場合があります。詳細は Not を含む式の変形 を参照してください。