【js】Parse.QueryのmatchesKeyInQueryを使う
Parse.QueryのmatchesKeyInQueryが便利なのでメモしておく。
https://parse.com/docs/js/api/symbols/Parse.Query.html#matchesQuery
https://parse.com/docs/js/api/symbols/Parse.Query.html#matchesKeyInQuery
ParseはデータをJSONライクな形式で保存しているKVS型のDBを使ってますが、
matchesQueryやmatchesKeyInQueryは簡単に言うと、RDB型のDBに対してSQLで行う、「他のテーブルと結合してデータを絞り込む」的なことを簡単に実現するためのAPIです。
・matchesQuery(key, query)
・matchesKeyInQuery(key, queryKey, query)
両社は引数の数が違っていて、matchesQueryが引数のクエリと本クエリとで一致させたいkeyの名称が同じ場合に使い、
matchesKeyInQueryはkeyの名称が違う場合に使えます。
ざっくり言うと、matchesKeyInQueryの方が引数が多い分より汎用的です。
サンプル
ユーザーごとに受講している授業(Lesson)が複数ある。ユーザーと受講している授業のマッピングは受講(Attend)情報としてまとめられている。
この時に、ログイン中のユーザーが受講している授業の一覧を取得する。
var Lesson = Parse.Object.extend("Lesson"); var Attend = Parse.Object.extend("Attend"); var query = new Parse.Query(Lesson); var innerQuery = new Parse.Query(Attend); innerQuery.equalTo("username", Parse.User.current().getUsername()); query.matchesKeyInQuery("objectId", "lessonId", innerQuery); query.find({ success: function(results) { //hogehoge }, error: function(error) { //fugafuga } });
innerQueryで、ログイン中のユーザー(Parse.User.Current())に関するAttend情報を絞りこみ、
AttendのlessonIdとobjectIdが一致するLesson情報を取得している。
このように、他のObjectのobjectIdをキーにしてマッピングしているような場合も、mathcesKeyInQueryを使えば簡単に欲しいデータを取得できる。