https://rightcode.co.jp/blogs/8047 を参考に改変 削除は不明な点が多いのでコレクション
削除の例のみにとどめる
------------------------------------------------
firestore-write.go ::
package main
import (
"context"
"log"
firebase "firebase.google.com/go"
"google.golang.org/api/option"
)
func main() {
// 初期化
ctx := context.Background()
sa := option.WithCredentialsFile("./path/serviceAccount.json")
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
log.Fatalln(err)
}
client, err := app.Firestore(ctx)
if err != nil {
log.Fatalln(err)
}
// データ追加 field数や名は統一されてなくていいい
_, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
"first": "Ada",
"middle": "Mathison",
"last": "Lovelace",
"born": 1815,
})
if err != nil {
log.Fatalf("Failed adding alovelace: %v", err)
}
// 切断
defer client.Close()
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
firestore-set.go:: for update
package main
import (
"context"
"log"
// "cloud.google.com/go/firestore" // なぜか不要 updateでは必要、delでも必要
firebase "firebase.google.com/go"
"google.golang.org/api/option"
)
func main() {
// 初期化
ctx := context.Background()
sa := option.WithCredentialsFile("./path/serviceAccount.json")
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
log.Fatalln(err)
}
client, err := app.Firestore(ctx)
if err != nil {
log.Fatalln(err)
}
// データ追加
_, err = client.Collection("users").Doc("user2").Set(ctx, map[string]interface{}{
"first": "Ada",
"middle": "Mathison",
"last": "Lovelace",
"born": 1815,
})
if err != nil {
log.Fatalf("Failed adding alovelace: %v", err)
}
// 切断
defer client.Close()
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
firestore-update.go::
package main
import (
"context"
"log"
"cloud.google.com/go/firestore"
firebase "firebase.google.com/go"
"google.golang.org/api/option"
)
func main() {
// 初期化
ctx := context.Background()
sa := option.WithCredentialsFile("./path/serviceAccount.json")
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
log.Fatalln(err)
}
client, err := app.Firestore(ctx)
if err != nil {
log.Fatalln(err)
}
// データ更新
_, updateError := client.Collection("users").Doc("user2").Set(ctx, map[string]interface{}{
"first": "Yeah",
}, firestore.MergeAll)
if updateError != nil {
// Handle any errors in an appropriate way, such as returning them.
log.Printf("An error has occurred: %s", err)
}
// 切断
defer client.Close()
}
----------------------------------------------
firestore-read.go::
package main
import (
"context"
"fmt"
"log"
firebase "firebase.google.com/go"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
)
func main() {
// 初期化
ctx := context.Background()
sa := option.WithCredentialsFile("./path/serviceAccount.json")
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
log.Fatalln(err)
}
client, err := app.Firestore(ctx)
if err != nil {
log.Fatalln(err)
}
// データ読み取り
iter := client.Collection("users").Documents(ctx)
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("Failed to iterate: %v", err)
}
fmt.Println(doc.Data())
}
// 切断
defer client.Close()
}
---------------------------------------------------------
firestore-coll-del.go::
package main
import (
"context"
"log"
"cloud.google.com/go/firestore"
firebase "firebase.google.com/go"
"google.golang.org/api/option"
)
func main() {
// 初期化
ctx := context.Background()
sa := option.WithCredentialsFile("./path/serviceAccount.json")
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
log.Fatalln(err)
}
client, err := app.Firestore(ctx)
if err != nil {
log.Fatalln(err)
}
ref := client.Collection("users")
deleteCollection(ctx, client, ref, 10)
}
func deleteCollection(ctx context.Context, client *firestore.Client,
ref *firestore.CollectionRef, batchSize int) error {
for {
// Get a batch of documents
iter := ref.Limit(batchSize).Documents(ctx)
numDeleted := 0
// Iterate through the documents, adding
// a delete operation for each one to a
// WriteBatch.
batch := client.Batch()
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
return err
}
batch.Delete(doc.Ref)
numDeleted++
}
// If there are no documents to delete,
// the process is over.
if numDeleted == 0 {
return nil
}
_, err := batch.Commit(ctx)
if err != nil {
return err
}
}
}
0 件のコメント:
コメントを投稿