简体   繁体   中英

How i can update data firebase with specific key in golang?

I am using golang and firego for connecting to Firebase. I want to update my data Status from ON to OFF with key IDAgent: 7 . This is my Database Structure

Image

Assumption: I don't know child active_chat. How can i update data in active_chat/-Koja8GuFplEN3kjbfPO where IDAgent = 7

I have tried this code

x := map[string]string{"Status": "OFF"}
ref.OrderBy("IDAgent").EqualTo("7").Update(x)

but this code wrong query.

Update for 2022:

package main

import (
    "context"
    "fmt"
    "time"

    firestore "cloud.google.com/go/firestore"
    firebase "firebase.google.com/go"

    "google.golang.org/api/option"
)

type (
    myDocument struct {
        Cars       []Car  `firestore:"cars"`
        carsCount  int64  `firestore:"car_count"`
        UpdateTime string `firestore:"update_time"`
    }
    Car struct {
        Name      string `firestore:"name"`
        YearBuilt string `firestore:"year_built"`
    }
)

func getFirebaseClient(ctx context.Context) (*firestore.Client, error) {
    sa := option.WithCredentialsFile("Path_To_Firebase_Key")

    // Initialize firebase app with admin privileges
    app, err := firebase.NewApp(ctx, nil, sa)

    if err != nil {
        err = fmt.Errorf("getFirestoreClient failed: %s", err)
        return nil, err
    }
    // Create client
    client, err := app.Firestore(ctx)
    if err != nil {
        err = fmt.Errorf("failed to connect to firestore: %v", err)
        return nil, err
    }

    return client, nil
}

func main() {
    // Create context
    ctx := context.Background()

    // Get firebase client
    client, err := getFirebaseClient(ctx)
    if err != nil {
        panic(err)
    }

    // Create car struct
    newCar := Car{
        "Volvo_Series1",
        "1920",
    }

    // Update time
    newTime := time.Now().UTC().Format("Monday, 01-02-2006 15:04:05")

    // Updates to document
    updates := []firestore.Update{
        {Path: "cars", Value: firestore.ArrayUnion(newCar)},
        {Path: "car_count", Value: firestore.Increment(1)},
        {Path: "update_date", Value: newTime},
    }

    // OPTION A)
    // Create collection reference
    collectionRef := client.Collection("cars")

    // Create document reference
    docRef := collectionRef.Doc("12345")

    // Update document
    _, err = docRef.Update(ctx, updates)
    if err != nil {
        err := fmt.Errorf("failed updating document: %s from %s collection %v", docRef.ID, docRef.Parent.ID, err)
        panic(err)
    }

    // OPTION B)
    _, err = client.Collection("cars").Doc("12345").Update(ctx, updates)
    if err != nil {
        err := fmt.Errorf("failed updating document: %s from %s collection %v", docRef.ID, docRef.Parent.ID, err)
        panic(err)
    }
}

In two ways you can do, as per Firebase doc with firego client library. Drafted answer based on from firego README.md .

Note: You have not provided the complete path of the structure, I have drafted the answer based on screenshot. So update your JSON path accordingly.

Approach 1:

f := firego.New("https://my-firebase-app.firebaseIO.com/active-chat/Koja8GuFpIEN3kjbfPO.json", nil)

x := map[string]string{
   "Status": "OFF",
}
if err := f.Update(x); err != nil {
  log.Fatal(err)
}

Approach 2:

f := firego.New("https://my-firebase-app.firebaseIO.com", nil)
f = f.Ref("/active-chat/Koja8GuFpIEN3kjbfPO.json")

x := map[string]string{
   "Status": "OFF",
}
if err := f.Update(x); err != nil {
  log.Fatal(err)
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM