libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

ScriptDbによるオブジェクトデータベース (3/6)

作成:2012-07-01 14:08
更新:2012-07-01 14:08

■クエリーによる検索

オブジェクトは、もちろん特定の条件に応じて取り出すことができます。queryメソッドの引数にどんなオブジェクトを用意するかによって検索の条件を設定することができます。

もっとも簡単なのは、検索する項目と値をオブジェクトに用意しておくことです。たとえば、こんな具合です。
var result = db.query
    ({type:"personaldata",
    name:"tuyano"});

これで、personaldataオブジェクトの中から、nameの値が「tuyano」のオブジェクトのみを集めて取り出すことができます。

●いくつかの値をグループ化する
例えば、「nameの値がtuyanoかsahikoのオブジェクトを取り出す」というようなことをやりたければ、以下のように行います。
var db = ScriptDb.getMyDb();
var result = db.query({type:'personaldata',name:db.anyOf(["tuyano","sachiko"])});
nameの値に複数の値を設定する場合、ScriptDbInstanceの「anyOf」を利用します。これは、引数に指定した配列のそれぞれの要素のいずれかに合致するものを指定するのに用いられます。

●○○ではないものを検索する
例えば、「nameの値がtuyanoでないもの」を取り出すのであれば、以下のように行います。、ScriptDbInstanceの「not」を使うことで、引数の要素以外のものを取得できます。
var db = ScriptDb.getMyDb();
var result = db.query({type:'personaldata',name:db.not("tuyano")});

●~以上、~以下の指定
オブジェクトに数値を保管しているプロパティなどがある場合、それらの数値を使った検索も必要となるでしょう。決まった値を検索するなら従来通りのやり方でできますが、「10以上の値を検索」というような値の比較を行う場合は、それに必要な関数を使います。例えば、「personaldataから、ageが20以上のものだけ検索する」という場合は以下のようになるでしょう。
var db = ScriptDb.getMyDb();
var result = db.query({age:db.greaterThanOrEqualTo(20)});
ここではageの値に、「db.greaterThanOrEqualTo」というものを使った値が設定されています。これは引数に指定した数字以上のものを示すためのメソッドです。こうした値の比較に関するメソッドが、ScriptDbInstanceには用意されています。以下に整理しましょう。

greaterThan――引数より大きいもの
greaterThanOrEqualTo――引数と同じかそれより大きい(引数以上)
lessThan――引数より小さいもの(引数未満)
lessThanOrEqualTo――引数と同じかそれより小さい(引数以下)
between――2つの引数の間の値(例えば、between(10,20)という具合)


ごく簡単な利用例を下に掲載しておきます。それぞれID、年齢、名前でオブジェクトを検索し、その結果をログに出力するものです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

// IDで検索
function findById(){
  var id = Browser.inputBox("ID:");
  var db = ScriptDb.getMyDb();
  var result = db.load(id);
  printToLog(result);
}
// 名前で検索
function findByName(){
  var str = Browser.inputBox("Name:");
  var db = ScriptDb.getMyDb();
  var result = db.query({type:'personaldata',name:str});
  printToLog(result);
}
   // 入力した年齢以上のものを検索
function findByAge(){
  var db = ScriptDb.getMyDb();
  var result = db.query({age:db.greaterThanOrEqualTo(20)});
  printToLog(result);
}
// 結果出力用関数
function printToLog(result){
    while(result.hasNext()){
    var data = result.next();
    var msg = "";
    msg = data.name + ", " + data.mail + ", " + data.tel + ", " + data.age;
     Logger.log(msg);
  }
}
※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る