Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Golang+Firestore

 Golang+Firestore

Basic about Cloud Firestore and how to use by Golang.

from-unknown

May 24, 2018
Tweet

More Decks by from-unknown

Other Decks in Programming

Transcript

  1. データ構造例 { [ “2018-05-05 12:00:00”, “2018-05-07 12:00:00” ], “Description” :

    “This is a test” …. } 一つのドキュメントに なる
  2. GoでFirestoreに接続 bgContext := context.Background() // Use a service account sa

    := option.WithCredentialsFile("./credentials/firestore_credential.json") app, err = firebase.NewApp(bgContext, nil, sa) if err != nil { log.Fatalln(err) } ダウンロードしてきた クレデンシャルを読み込ませて 新規アプリを作るだけ
  3. Goでデータをインサート type Event struct { Name string   ... } event

    := &Event{ … } wr, err = client.Collection("event").Set(bgContext, event) structを作って structにデータを詰めて 任意のコレクションに セットするだけ IDの指定が無い場合は 自動採番される AddはIDが既に存在す る場合失敗する Setは上書きする
  4. GoでID指定してデータをインサート type Event struct { Name string   ... } event

    := &Event{ … } wr, err = client.Collection("event").Doc(“123”).Set(bgContext, event) IDを指定する場合はDoc() を挟む
  5. Goでサブコレクションにインサート type Event struct { Name string   ... } event

    := &Event{ … } wr, err = client.Collection("May").Doc(“123”).Collection("event") .Set(bgContext, event) Docを指定してから更に Collectionを指定する
  6. Goでデータを取得する type Event struct { Name string   ... } doc,

    err := client.Collection("event").Doc(“123”).Get(bgContext) var event Event doc.DataTo(&event) 取得したいデータのIDを 指定する structに展開する 構造が違うと失敗するので 注意
  7. Goで複数データを取得する type Event struct { Name string   ... } iter

    := client.Collection("event").Documents(bgContext) for { doc, err := iter.Next() if err == iterator.Done { break } var event Event doc.DataTo(&event) } まとめて取得する場合は Documentsを使用する iteratorが取得出来るので forで回してデータを 取得する
  8. Goで並べ替えたデータを取得する type Event struct { Name string   ... } iter

    := client.Collection("event").OrderBy("TimeStamp", firestore.Asc) .Documents(bgContext) for { doc, err := iter.Next() if err == iterator.Done { break } ... } OrderByで並べ替え可能
  9. Goで並べ替えたデータを取得する type Event struct { Name string   ... } iter

    := client.Collection("event").Where("num", ">", 10).Documents(bgContext) for { doc, err := iter.Next() if err == iterator.Done { break } ... } Where句で絞り込み可能