package main import ( "context" "flag" "fmt" "io/ioutil" "github.com/dgraph-io/dgraph/client" "github.com/dgraph-io/dgraph/x" "google.golang.org/grpc" ) var ( dgraph = flag.String("d", "127.0.0.1:9080", "Dgraph server address") ) type User struct { UID uint64 `dgraph:"_uid_"` Email string `dgraph:"email"` Profile string `dgraph:"profile"` } type Res struct { Root []User `dgraph:"usr"` } func main() { conn, err := grpc.Dial(*dgraph, grpc.WithInsecure()) x.Checkf(err, "While trying to dial gRPC") defer conn.Close() clientDir, err := ioutil.TempDir("", "client_") dgraphClient := client.NewDgraphClient([]*grpc.ClientConn{conn}, client.DefaultOptions, clientDir) // SET SCHEMA ---------------------------------------------- req := client.Req{} req.SetQuery(` mutation { schema { email: string @index(hash) . profile: string . } } `) resp, err := dgraphClient.Run(context.Background(), &req) // CREATE USER1 ---------------------------------------------- req = client.Req{} person1, err := dgraphClient.NodeBlank("person1") e := person1.Edge("email") err = e.SetValueString("user1@aaa.com") req.Set(e) e = person1.Edge("profile") err = e.SetValueString("admin") req.Set(e) resp, err = dgraphClient.Run(context.Background(), &req) // QUERY USER1 ---------------------------------------------- req = client.Req{} req.SetQuery(`{ usr(func: eq(email, "user1@aaa.com")) { _uid_ email profile } }`) resp, err = dgraphClient.Run(context.Background(), &req) var r Res err = client.Unmarshal(resp.N, &r) fmt.Printf("Query1: %+v\n\n", r.Root) // UPDATE USER1 ---------------------------------------------- usr := r.Root[0] usrnode := dgraphClient.NodeUid(usr.UID) // request 1: remove only (with mutation) req = client.Req{} req.SetQuery(fmt.Sprintf(`mutation { delete { <%s> * . } }`, usrnode)) resp, err = dgraphClient.Run(context.Background(), &req) fmt.Println("error is", err) // request 2: insert new value req = client.Req{} e = usrnode.Edge("profile") e.SetValueString("root") req.Set(e) resp, err = dgraphClient.Run(context.Background(), &req) // QUERY USER1 ---------------------------------------------- req = client.Req{} req.SetQuery(`{ usr(func: eq(email, "user1@aaa.com")) { _uid_ email profile } }`) resp, err = dgraphClient.Run(context.Background(), &req) err = client.Unmarshal(resp.N, &r) fmt.Printf("Query2: %+v\n\n", r.Root) // DELETE USER1 ---------------------------------------------- for _, u := range r.Root { fmt.Println(u.UID) req = client.Req{} req.SetQuery(fmt.Sprintf("mutation { delete { <%d> * * . } }", u.UID)) resp, err = dgraphClient.Run(context.Background(), &req) } err = dgraphClient.Close() x.Check(err) }