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

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

SDKガイド(JavaScript)

クエリの使い方

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

基本的な検索の利用

オブジェクトを検索・取得する場合は、検索対象のクラスに対して検索条件を設定し、検索実行メソッドをメソッドチェインで続けて実行します。

具体的な実装例は以下のようになります。

var ncmb = new NCMB(apikey, clientkey);

//プレイヤーがTaroのスコアを降順で取得
var GameScore = ncmb.DataStore("GameScore");
GameScore.equalTo("playerName", "Taro")
         .order("score",true)
         .fetchAll()
         .then(function(results){
            console.log("Successfully retrieved " + results.length + " scores.");
            for (var i = 0; i < results.length; i++) {
              var object = results[i];
              console.log(object.score + " - " + object.get("playerName"));
            }
          })
         .catch(function(err){
            console.log(err);
          });

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

値の一致・不一致や、大小比較による絞り込み検索が可能です。

// playerName === "Taro"
equalTo("playerName", "Taro")

// playerName !== Taro
notEqualTo("playerName", "Taro")


// playerAge > 18
greaterThan("playerAge", 18)

// playerAge >= 18
greaterThanOrEqualTo("playerAge", 18)

// playerAge < 18
lessThan("playerAge", 18)

// playerAge <= 18
lessThanOrEqualTo("playerAge", 18)


// playerName === "Taro" || playerName === "Jiro" || playerName === "Saburo"
in("playerName",
["Taro", "Jiro", "Saburo"])

// playerName !== "Taro" && playerName !== "Jiro" && playerName !== "Saburo"
notIn("playerName",
["Taro", "Jiro", "Saburo"])

// score != null
exists("score")

// ※その他の制約はSDKリファレンス参照

配列に対するクエリ

配列の要素に対して検索条件を設定できます。

// arrayKey: [1, 2, 3]

// 要素のいずれかと一致
equalTo("arrayKey", 2) //match

// 要素にいずれかを含む
inArray("arrayKey", [2, 3, 4]) // match

// 要素のいずれとも一致しない
notInArray("arrayKey", [2, 3, 4]) //unmatch

// 要素にすべてを含む
allInArray("arrayKey", [2, 3, 4]) // unmatch

ポインタに対するクエリ

検索結果にポインタの参照先オブジェクトの情報を含めて取得する場合はincludeオプションを利用します。

//playerに参照先のオブジェクト情報が入る
include("player")

includeオプションを利用しない場合、ポインタが設定されているプロパティは以下のように取得されます。

{key:{__type:"Pointer",className:"対象クラス名", objectId:"対象オブジェクトID"}}

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

リレーションが設定されているプロパティは、以下のように取得されます。

{key:{__type:"Relation", className:"対象クラス名"}}

リレーションに設定されているオブジェクトを取得する場合、以下のように検索します。

このとき、プロパティに関連オブジェクトを設定しているオブジェクトのクラスではなく、取得したいオブジェクトのクラスでクエリを生成します。

var RelatedObjects = ncmb.DataStore("RelatedObjects");

// baseObjectのrelatingプロパティに関連付けられているRelatedObjectクラスのオブジェクトを検索
RelatedObjects.relatedTo(baseObject, "relating")
              .fetchAll()
              .then(function(results){
                for (var i = 0; i < results.length; i++) {
                  var object = results[i];
                  console.log (object.name);
                }
              })
              .catch(function(err){
                console.log(err);
              });

位置情報に対するクエリ

位置情報のクエリ設定は、検索距離の指定と、検索範囲の指定が可能です。
検索距離を指定した場合は、検索を開始する地点から近い順にデータを取得します。

var origin = new ncmb.GeoPoint(0, 0);

//検索開始位置と距離をキロメートルで指定
near("location", origin)

//検索開始位置と距離をキロメートルで指定
withinKilometers("location", origin, 1000)

//検索開始位置と距離をマイルで指定
withinMiles("location", origin, 800)

//検索開始位置と距離をラジアンで指定
withinRadians("location", origin, 0.3)

範囲を指定して検索する場合は、南西と北東の頂点位置から指定した矩形の内部にあるデータを取得します。

var southWest = new ncmb.GeoPoint(20, 50);
var northEast = new ncmb.GeoPoint(50, 0);

//検索範囲の左下と右上の位置を指定
withinSquare("location", southWest, northEast)

位置情報が設定されているプロパティは、以下のように取得されます。

{__type:"GeoPoint",longitude:「経度」,latitude:「緯度」}

クエリの合成

AND合成

メソッドチェインで複数の条件を続けて記述することでAnd合成します。

var GameScore = new ncmb.DataStore("GameScore");

// GameScoreクラスでscoreが100以上500未満のオブジェクトを検索
GameScore.lessThan("score", 500)
         .greaterThanOrEqualTo("score", 100);
         .fetchAll()
         .then(function(results){
            for (var i = 0; i < results.length; i++) {
                var object = results[i];
                console.log (object.score);
            }
          })
         .catch(function(err){
            console.log(err);
          });

OR合成

複数のサブクエリを、orメソッドで合成します。

var GameScore = new ncmb.DataStore("GameScore");
var subquery1 = GameScore.lessThan("level", 10);
var subquery2 = GameScore.greaterThanOrEqualTo("score", 500);

// GameScoreクラスでscoreが500以上か、levelが10より小さいオブジェクトを検索
GameScore.or([subquery1, subquery2])
         .fetchAll()
         .then(function(results){
            for (var i = 0; i < results.length; i++) {
                var object = results[i];
                console.log (object.id);
            }
          })
         .catch(function(err){
            console.log(err);
          });

サブクエリの結果を利用した検索

サブクエリの検索結果がプロパティにもつ値を利用して検索を行うことができます。

以下の例ではpopulationが1000000より大きいCityクラスのオブジェクトがcitynameプロパティにもつ値をhometownプロパティにもつ、Teamクラスのオブジェクトを検索します。
例えば、サブクエリの検索結果のオブジェクトが、citynameにそれぞれ"Tokyo", "Fukuoka", "Sapporo"をもつ場合、このいずれかをhometownにもつTeamクラスのオブジェクトを検索します。

var City = ncmb.DataStore("City");
var Team = ncmb.DataStore("Team");
var bigCity = City.greaterThan("population", 1000000);

Team.select("hometown", "cityname", bigCity)
         .fetchAll()
         .then(function(results){
            for (var i = 0; i < results.length; i++) {
                var object = results[i];
                console.log (object.id);
            }
          })
         .catch(function(err){
            console.log(err);
          });

検索結果のオブジェクトをポインタで参照しているオブジェクトを検索することができます。

以下の例ではpopulationが1000000より大きいCityクラスのオブジェクトのポインタをhometownプロパティにもつ、Teamクラスのオブジェクトを検索します。

var City = ncmb.DataStore("City");
var Team = ncmb.DataStore("Team");
var bigCity = City.greaterThan("population", 1000000);

Team.inQuery("hometown", bigCity)
         .fetchAll()
         .then(function(results){
            for (var i = 0; i < results.length; i++) {
                var object = results[i];
                console.log (object.id);
            }
          })
         .catch(function(err){
            console.log(err);
          });

検索結果の加工

取得件数の指定

検索結果の取得数上限を指定できます。

// 最大10件まで取得する
limit(10)

取得開始位置の指定

検索結果の取得開始位置を指定できます。

// 検索結果の開始から11番目から取得する
skip(10)

検索結果の並び替え

検索結果の並び順をソートできます。

// scoreプロパティで昇順にソート
order("score")

// scoreプロパティで降順にソート
order("score", true)

// 複数のキーに対してソート(先に指定したキーが優先される)
order("score", true).order("level")

検索結果件数の取得

検索結果の件数を取得します。
fetchAllで取得できるオブジェクトは最大数は100件ですが、countは検索条件に合致するオブジェクトの総数を返します。

var GameScore = ncmb.DataStore("GameScore");
GameScore.equalTo("playerName", "Taro")
         .count()
         .fetchAll()
         .then(function(results){
            console.log(results.count); // 検索結果の件数を表示
          })
         .catch(function(err){
            console.log(err);
          });

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

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

ページの先頭へ