データストアでは細かな条件を指定して検索ができます。例えば以下があります。
- 文字列(完全一致、正規表現)
- 数値(完全一致、以上、以下)
- 配列(含まれる、または含まれない)
- 真偽値
- 日付(完全一致、以上、以下)
- 値の存在
そしてデータストアではポインター、リレーションというクラス同士を結びつける機能をサポートしています。今回はこのポインターを検索条件に指定する方法を紹介します。
オブジェクトを指定するだけでは不可
例えばある施設(Venue)に紐付くスケジュール(VenueSchedule)を考えます。VenueScheduleにはvenueカラムがあり、ポインターでVenueが紐付いています。
こうしたリレーション時において、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 はポインター、リレーション利用時にクラスを条件指定したい時に利用できます。覚えておくと便利に使えます。