2014年9月17日水曜日

Parse.comの$selectというクエリについて調べてみた

概要

Parse.comの説明は省きます
REST-APIのGET系のAPIでクエリを指定していろいろな検索をすることができるのですが、その中に$selectというクエリがあります
$selectは副問い合わせを実行するためのクエリです
実際に試せばある程度動きはわかるのですが、そもそも動かし方もわかりづらいのでメモがてら説明しようと思います

環境

  • Mac OS X 10.8.5
  • Parse.com ( 2014/09/17 時点 )
  • curl

説明

UIでデータを投入しつつcurlでクエリを実行して動きを確認します

UIで事前にデータを投入

まず、サンプルのデータを投入します
Parse.comのダッシュボードにログインし会員の一覧を開いて以下のユーザを登録します
list_user.png

UIが新しくなってCoreというサービス配下にユーザ一覧はあります
ユーザを登録する際は、はじめにusernameをダブルクリックしてユーザ名を入力してEnter、その後にpasswordをダブルクリックしてパスワードを入力してEnter、すると登録することができます
登録が完了するとobjectIdが自動で入力されます

次にGameScoreというクラスを作成して以下のデータを登録してください
list_gamescore.png

ユーザ登録時と同様にCoreからクラスを追加します
クラスの追加は、もう少し下に「+Add Class」というボタンがあるのでそこからGameScoreクラスを追加します
また、クラスを追加したらscoreというフィールドも追加します
フィールドの追加は図にもある「+Col」から追加します
クラスの作成とフィールドの追加ができたらplayerName, scoreとデータを入力して登録します
こちらも登録が完了するとobjectIdが自動で入力されます

curlでクエリを作成する

いきなりですが、以下がサンプルクエリです

curl 
  -X GET
  -H "X-Parse-Application-Id: 1234567890abcdefghijklmnopqrstuvwxyz"
  -H "X-Parse-REST-API-Key: 1234567890abcdefghijklmnopqrstuvwxyz"
  -d 'where={"username":{"$select":{"query":{"className":"GameScore","where":{"score":{"$gt":50}}},"key":"playerName"}}}'
  'https://api.parse.com/1/users'

X-Parse-Application-IdX-Parse-REST-API-Keyは自分のアプリのキー情報に置き換えてください
注目するべきはwhere=の部分でこれが$selectを使った検索クエリになります
次でクエリの動作を詳しく説明します

動作の仕組み

流れとして3段階で

  1. GameScoreクラスのscoreというフィールドに対して、scoreが50以上のデータを検索
    {"className":"GameScore","where":{"score":{"$gt":50}}}の部分
  2. その結果からplayerNameフィールドの一覧を取得
    "key":"playerName"の部分
  3. 取得したplayerNameフィールドの一覧と同じusernameを持つユーザをusersクラスから取得する
    where={"username":{"$select":{"query":...の部分

となります
クエリを分解して考えるとちょっとわかりやすいかもしれません

今回のサンプルでの結果は以下の通りとなります

{
    "results": [
        {
            "createdAt": "2014-09-17T01:25:38.180Z", 
            "objectId": "2XQRFoaRg9", 
            "updatedAt": "2014-09-17T01:35:29.539Z", 
            "username": "Sean Plott"
        }
    ]
}

Sean Plottさんのみ取得されます
「Aliceさんも50点以上なのに含まれていないのはなぜ?」
という疑問に対してはAliceさんはusersクラスに存在しないからです

$selectクエリだけでしたが、すごい大げさに説明してみました
少しは理解していただけましたでしょうか
すごいニッチな情報ですがParse.comを使う方は参考にしてみてください

参考サイト

0 件のコメント:

コメントを投稿