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