Skip to content

Instantly share code, notes, and snippets.

@nikolaydubina
Created December 6, 2025 08:30
Show Gist options
  • Select an option

  • Save nikolaydubina/fd590d87601ed14ee1a289fb3a7a2fdf to your computer and use it in GitHub Desktop.

Select an option

Save nikolaydubina/fd590d87601ed14ee1a289fb3a7a2fdf to your computer and use it in GitHub Desktop.
package main
import (
"context"
"encoding/json"
"flag"
"log"
"os"
"cloud.google.com/go/firestore"
"google.golang.org/api/iterator"
)
func main() {
var project, collection string
flag.StringVar(&project, "project", os.Getenv("PROJECT_ID"), "GCP project ID")
flag.StringVar(&collection, "collection", "", "Firestore collection")
flag.Parse()
if project == "" || collection == "" {
flag.Usage()
os.Exit(1)
}
ctx := context.Background()
db, err := firestore.NewClient(ctx, project)
if err != nil {
log.Fatal(err)
}
defer db.Close()
enc := json.NewEncoder(os.Stdout)
docs := db.Collection(collection).Documents(ctx)
defer docs.Stop()
for {
doc, err := docs.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Printf("error: %s", err)
continue
}
if err := enc.Encode(doc.Data()); err != nil {
log.Printf("error encoding doc %s: %s", doc.Ref.ID, err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment