サーバー構築不要!スマートフォンアプリ向けの新クラウド

トップ >ドキュメント >SDKガイド(iOS):クエリの使い方

SDKガイド(iOS)

ドキュメント内検索

クエリの使い方

このドキュメントは更新されていません。
こちらから最新版をご覧ください。

基本的な検索の利用

以下のサンプルでは、authorがncmbに一致するオブジェクトを取得しています。

NCMBQuery *query = [NCMBQuery queryWithClassName:@"Post"];
[query whereKey:@"author" equalTo:@"ncmb"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        // 成功
        for (NCMBObject *object in objects) {
            NSLog(@"%@", object.objectId);
        }
    } else {
        // エラー
        NSLog(@"%@", error);
    }
}];

標準クラスを検索する場合のクラス名

会員やロール・ファイルなど、mobile backendに標準で存在するクラスに対して、
inQueryを用いた検索など、クラス名を指定する必要がある場合は以下をご覧ください。

クラス名 役割
user 会員管理のクラス
role ロールのクラス
file ファイルストアのクラス
installation 端末情報一覧のクラス
push プッシュ通知のクラス

基本的なクエリのオペランド

equalToやnotEqualToによる絞り込み検索が可能です。 

NCMBQuery *query = [NCMBQuery queryWithClassName:@"Post"];

[query whereKey:@"author" equalTo:@"ncmb"]; // authorがncmbと一致するオブジェクトを取得
[query whereKey:@"author" notEqualTo:@"ncmb"];  // authorがncmbと不一致なオブジェクトを取得

以下のサンプルは、大小比較絞り込み条件の指定を行うためのクエリです。

// count < 4
[query whereKey:@"count" lessThan:[NSNumber numberWithInt:4]];

// count <= 4
[query whereKey:@"count" lessThanOrEqualTo:[NSNumber numberWithInt:4]];

// count > 4
[query whereKey:@"count" greaterThan:[NSNumber numberWithInt:4]];

// count >= 4
[query whereKey:@"count" greaterThanOrEqualTo:[NSNumber numberWithInt:4]];

// ※他制約はdoc参照

limitやskipを使って、取得件数や取得開始位置を指定することができます。
また、複数のオブジェクトがある場合はソートすることも可能です。

//取得件数の指定
query.limit = 10;

//取得開始位置の指定
query.skip = 10;

// 昇順
[query orderByAscending:@"count"];

// 降順
[query orderByDescending:@"count"];

配列に対するクエリ

指定キーの配列内から、値を指定してマッチするものを取得することができます。

// arrayKey: [1, 2, 3]
[query whereKey:@"arrayKey" equalTo:[NSNumber numberWithInt:2]];

// 指定した複数の値がすべて含まれるものにマッチする
[query whereKey:@"arrayKey" containsAllObjectsInArray:@[@2, @3, @4]];

文字列に対するクエリ

指定したキーの文字列とクエリで指定した文字列がマッチするものを取得することができます。

// 完全一致
[query whereKey:@"author" equalTo:@"ncmb"];

位置情報に対するクエリ

位置情報のクエリ設定は、検索距離の指定と、検索範囲の指定が可能です。

検索距離を指定した場合は、検索を開始する地点から近い順にデータを取得します。

//検索開始位置と距離をキロメートルで指定
[query whereKey:@"point" nearGeoPoint:geoPoint withinKilometers:[distance doubleValue]];

検索範囲を指定した場合は、検索範囲の矩形内からデータを取得します。

//検索範囲の左下と右上の位置を指定
[query whereKey:@"point" withinGeoBoxFromSouthwest:southwestGeoPoint toNortheast:northeastGeoPoint];

リレーションに対するクエリ

関連オブジェクトで絞り込んでオブジェクトを取得することができます。

//副問い合わせと合致するデータを取得
NCMBQuery *innerQuery = [NCMBQuery queryWithClassName:@"Post"];
[innerQuery whereKey:@"author" equalTo:@"ncmb"];
NCMBQuery *query = [NCMBQuery queryWithClassName:@"Comment"];
[query whereKey:@"post" matchesQuery:innerQuery];
[query findObjectsInBackgroundWithBlock:^(NSArray *comments, NSError *error) {
    // 取得
}];

以下のサンプルでは、子の情報を含めて親オブジェクトを取得しています。

NCMBQuery *query = [NCMBQuery queryWithClassName:@"Comment"];

// 子(post)の情報も含めて取得
[query includeKey:@"post"];

[query findObjectsInBackgroundWithBlock:^(NSArray *comments, NSError *error) {
    for (NCMBObject *comment in comments) {
        NCMBObject *post = [comment objectForKey:@"post"];
        NSLog(@"post: %@", post);
    }
}];

カウント

countObjectsInBackgroundWithBlockメソッドを利用して、クエリにマッチする件数を取得できます。

NCMBQuery *query = [NCMBQuery queryWithClassName:@"Comment"];
[query whereKey:@"author" equalTo:@"ncmb"];
[query countObjectsInBackgroundWithBlock:^(int count, NSError *error) {
    if (!error) {
        // 成功
    } else {
        // エラー
    }
}];

クエリの合成

オペランドを複数指定することで、AND検索を行うことができます。
以下の例では、intというキーが30を超え、50未満の値となるよう条件を設定しています。

NCMBQuery *query = [NCMBQuery queryWithClassName:@"queryTestClass"];

//intが30より上を指定
[query whereKey:@"int" greaterThan:@30];
//intが50未満を指定
[query whereKey:@"int" lessThan:@50];

NSError *e = nil;
NSArray *res = [query findObjects:&e];
if (e != nil){
    NSLog(@"find object error:%@", e);
} else {
    //検索結果に対する処理
}

また、orQueryWithSubqueriesメソッドを利用することで、
複数のクエリオブジェクトをOR合成することができます。

NCMBQuery *lotsOfWins = [NCMBQuery queryWithClassName:@"Post"];
[lotsOfWins whereKey:@"count" greaterThan:[NSNumber numberWithInt:2]];

NCMBQuery *fewWins = [NCMBQuery queryWithClassName:@"Post"];
[fewWins whereKey:@"count" lessThan:[NSNumber numberWithInt:9]];
NCMBQuery *query = [NCMBQuery orQueryWithSubqueries:[NSArray arrayWithObjects:fewWins,lotsOfWins,nil]];
[query findObjectsInBackgroundWithBlock:^(NSArray *results, NSError *error) {
    // 取得
}];

お探しの内容が見つからなかった場合はユーザーコミュニティ もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。

推奨画面サイズ1024×768px以上

ページの先頭へ