読者です 読者をやめる 読者になる 読者になる

16bit!

エンジニアじゃなくなっちゃった人が何かを書くブログ

【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を使えば簡単に欲しいデータを取得できる。

おまけ

Parseを使っていると、上記のようにObject間の結合みたいなことが簡単にできたり、コンソールがExcelライク(つまりRDBライク)だったりして、
RDB的な思考回路のままさくさく使えるようになってるなぁと感じます。
便利だね。


おわり。