2010/04/03

TinyDSメモ(Query編)

Query

クエリ用クラス
内部で使っているので、appengine-apiに含まれるDatastore::Query辺りを合わせて読むと幸せになれそう

使い方

Person.query.sort(:user_name, :desc).filter(:user_name, '==', 'hoge').one

基本的に設定メソッドはselfを返すのでメソッドチェインが可能

メソッド

メソッド説明
initialize(model_class)コンストラクタ
Base.queryで取得するので基本使わない。
ancestor(anc)祖先を指定する。
anc:祖先。Base, String, Keyを指定可能。
filter(*args)フィルタを設定する。
argsはHashまたはパラメータ名, 演算子, 値の3組のどちらかを指定する。
Hashを指定した場合はname=>パラメータ名, value=>値のペアで「==」フィルタになる。
3組の場合に指定できる演算子は以下のとおり
  • ==
  • >
  • >=
  • <
  • <=
  • IN
  • !=
  • <>
sort(name, dir=:asc)ソートを指定する。
name:プロパティ名
dir:ソートの方向 :asc(昇順)または:desc(降順)を指定する。
デフォルトは昇順。
keys_only検索結果としてKeyだけを返すように設定する
count設定されている条件で取得できるエンティティの数を返す。
one設定されている条件で1件のエンティティを取得する。
複数ヒットする場合はTooManyResults例外、ヒットしなかった場合nilを返す
all(opts={})設定されている条件にヒットする全エンティティを取得する。
optsには:limit, :offset, :chunk, :transactionが指定できる。
:limit : クエリが戻す結果の上限
:offset : オフセット(スキップする件数)。スキップした数は:limitに影響しない
:chunk : 内部のチャンク方法を指定するらしいがよく分からない。
:transaction : クエリを実行するトランザクション。祖先のクエリ(ancestor queries)のみサポートしている。
指定しない場合、現在のトランザクション(current transaction)を使用する。
each(opts={})設定されている条件でヒットするエンティティにブロックで渡された処理を行う。
optの値はallと同じ
collect(opts={})設定されている条件でヒットするエンティティにブロックで渡された処理を行い、その結果を返す。
optの値はallと同じ
keys(opts={})指定された条件でヒットするエンティティのKeyを返す。
optの値はallと同じ

0 件のコメント: