#はじめに
今回は前回のAppEngine GoからCloud Firestoreを使ってみるに続いて動的にクエリを生成する方法となります。
この記事ではFirestoreの初期化やクライアントの生成などは取り上げません。
Go言語(AppEngine Go含む)でのFirestore利用方法はFirestore公式のドキュメントか以前書いたこちらの記事を参照して下さい。
##動的なクエリの作り方
この記事では『フォームデータの入力のあり、なしでクエリを変えたい』など、その都度違うクエリを発行したい場合を想定しています。
以下コード**(動的にクエリを作る部分以外かなり端折ってます)**
main.go
import (
firebase "firebase.google.com/go"
)
main.go
/*
ここでCloud Firestoreへの認証処理
クライアントの生成など
*/
query := client.Collection("book").Query // コレクションBookへのクエリ
if title != "" { // フォームからのパラメタ'title'に値が入っていれば
query = query.Where("title", "==", title) // クエリを追加
}
if author != "" {
query = query.Where("author", "==", author)
}
if circle != "" {
query = query.Where("circle", "==", circle)
}
// ctxの生成は context.Background()
// AppEngine Goであれば appengine.NewContext(r)
iter := query.Documents(ctx) //クエリを実行してiterに結果を格納
上記のように書くことで必要なクエリを動的に連結させる事が可能になります。
上のコードでは図書の検索フォームからデータを持ってきて入力されている項目に関するクエリのみを連結しています。
#あとがき
フォームのデータ入力の有無によってクエリを連結させる方法は検索しても出てこなかったためここにメモしておこうと思います。
間違っている点などありましたらコメントお願い致します。