gaedirectを使ってGoogle App Engineのデータストアにアクセスする(2)

gaedirectを使ってGoogle App Engineのデータストアにアクセスする際のノウハウ。

  • 参照結果とその形式
  • 文字列として返される。各エンティティ(行)の区切り文字は ‘<e>’、プロパティの区切りは ‘<p>’ になる。

  • サンプル
  • 前提:
    ・kind名:xTestdb
    ・property名:test_key,test_aaa,test_bbb,test_ccc,test_ddd
    ・entity:2件
    ・key:適宜生成
    実行例:

    xTestdb("305_1362983637938")<p>305_1362983637938<p>1st data<p>b1@bb.com<p>https://www.google.co.jp/<p>100<e>xTestdb("995_1362983655034")<p>995_1362983655034<p>2nd data<p>b2@bb.com<p>https://www.google.co.jp/<p>99
    
  • ポイント
  • N件のpropertyを参照すると、先頭にkind名とキー値が付与されて、1entityあたりN+1件の結果が返される。

  • 結果の処理
  • 結果を「オブジェクトの配列」に変換するコード例

    // JavaScript
    this.dbRevAll = function(callback){
    // property名をカンマ区切りで並べる
    //var fld = 'testdb_key,testdb_aaa,testdb_bbb,testdb_ccc,testdb_ddd';
    // 配列に変換
    var fldArray = (this.fld).split(',');
    // クエリ(検索条件)の設定
    var query = qinit(tbl,this.fld);
    // query['SORT'] = 'testdb_aaa:ASCENDING'; // 昇順でソート
    // リクエスト発行
    $.get(gae(),query,function(res){
        res = res.replace(/[\n\r]/g,''); // 余分な改行文字を除去
        console.log('dbRevAll:' + res);
        // entityごとに配列に分割する
        var entities = res.split('<e>'); //
        var d = new Array(); // 結果を格納する配列
        for (var i=0; i < entities.length; i++){
            // 各entityのpropertyごとに配列に分割する
            // props[0] : kind名+key値 (例:xTestdb("keyvalue") )
            // props[1..n] : property値
            var props = entities[i].split('<p>');
            d[i] = new Object(); // 結果を格納するオブジェクト
            for (var j=0 ; j < props.length-1;  j++ ){
                d[i][ fldArray[j] ] = props[j+1];
                // d[0].testdb_aaa , d[1]['testdb_bbb'] のような形式でアクセスできる
            }
        }
        callback(d); // コールバック関数の呼び出し
    });
    
カテゴリー: Tips タグ: , パーマリンク