in devtools/cmd/populate_firestore/populate_firestore.go [116:154]
func updateDB(ctx context.Context, client *firestore.Client, iter *firestore.DocumentIterator, update func(*firestore.DocumentSnapshot, *firestore.WriteBatch) (bool, error)) (string, error) {
done := false
total := 0
var lastID string
for !done {
wb := client.Batch()
size := 0
for {
ds, err := iter.Next()
if err == iterator.Done {
done = true
break
}
if err != nil {
return "", err
}
lastID = ds.Ref.ID
total++
if total%1000 == 0 {
fmt.Printf("%d records, last ID %s\n", total, lastID)
}
if b, err := update(ds, wb); err != nil {
return "", err
} else if b {
size++
if size >= maxBatchSize {
break
}
}
}
if size > 0 {
_, err := wb.Commit(ctx)
if err != nil {
return "", fmt.Errorf("wb.Commit: %w", err)
}
}
}
return lastID, nil
}