FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

データストアでポインターを検索条件に指定するには

f:id:mbaasdevrel:20180706121133p:plain

データストアでは細かな条件を指定して検索ができます。例えば以下があります。

  • 文字列(完全一致、正規表現)
  • 数値(完全一致、以上、以下)
  • 配列(含まれる、または含まれない)
  • 真偽値
  • 日付(完全一致、以上、以下)
  • 値の存在

そしてデータストアではポインター、リレーションというクラス同士を結びつける機能をサポートしています。今回はこのポインターを検索条件に指定する方法を紹介します。

オブジェクトを指定するだけでは不可

例えばある施設(Venue)に紐付くスケジュール(VenueSchedule)を考えます。VenueScheduleにはvenueカラムがあり、ポインターでVenueが紐付いています。

f:id:mbaasdevrel:20180706121133p:plain

こうしたリレーション時において、VenueScheduleをVenueで検索したいとします。つまり以下のようなコードですが、これは失敗します。

const result = await VenueSchedule
  .inQuery('venue', venue)
  .count()
  .fetchAll();
// result.countは常に0が返ってくる
if (result.count > 0) {
  continue;
}

inQueryを使う

そこで使うのが inQuery になります。inQuery はポインター、リレーションで使えるオペランドで、指定したクエリ条件にマッチしたデータを取得します。今回のようにあるVenueに関連するデータだけを取り出す場合には、VenueQueryは該当Venueだけ返ってくる条件を指定します。

const VenueQuery = Venue.equalTo('objectId', venue.objectId);
const result = await VenueSchedule
  .inQuery('venue', VenueQuery)
  .count()
  .fetchAll();
// 一件以上返ってくる
if (result.count > 0) {
  continue;
}

まとめ

inQuery はポインター、リレーション利用時にクラスを条件指定したい時に利用できます。覚えておくと便利に使えます。

REST API リファレンス : クエリの指定方法 | ニフクラ mobile backend

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。