func updateDB()

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
}