登录
首页 >  Golang >  Go问答

从 Dgraph 中使用 dgo API 删除 NQuad 数据

来源:stackoverflow

时间:2024-03-14 21:00:22 298浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《从 Dgraph 中使用 dgo API 删除 NQuad 数据》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

是否可以使用 github.com/dgraph-io/dgo/protos/api 中的 api.nquad 从给定节点删除与谓词匹配的所有边?

我正在尝试实现相当于 delete {0x1234 * }

func TestDeleteQuad(t *testing.T) {
    subject := "0x01"
    ctx := context.TODO()
    d, err := grpc.Dial(testEndpoint, grpc.WithInsecure())
    if err != nil {
        panic(err)
    }
    client := dgo.NewDgraphClient(api.NewDgraphClient(d))
    txn := client.NewTxn()
    defer txn.Discard(ctx)
    if _, err := txn.Mutate(ctx, &api.Mutation{Del: []*api.NQuad{
        &api.NQuad{
            Subject:     subject,
            Predicate:   "test.likes",
            ObjectId:    "*",
            ObjectValue: nil,
        },
    }}); nil != err {
        panic(err)
    }
    err = txn.Commit(ctx)
    assert.NoError(t, err)
}

我尝试使用 "*" "" x.star 作为 objectid 但这些解决方案都不起作用


解决方案


这非常违反直觉,但要删除边,必须使用 objectvalue 而不是 objectid 必须设置为 api.value_defaultval 星:

func TestDeleteQuad(t *testing.T) {
    subject := "0x01"
    ctx := context.TODO()
    d, err := grpc.Dial(testEndpoint, grpc.WithInsecure())
    if err != nil {
        panic(err)
    }
    client := dgo.NewDgraphClient(api.NewDgraphClient(d))
    txn := client.NewTxn()
    defer txn.Discard(ctx)
    if _, err := txn.Mutate(ctx, &api.Mutation{Del: []*api.NQuad{
        &api.NQuad{
            Subject:     subject,
            Predicate:   "test.likes",
            ObjectValue: &api.Value{&api.Value_DefaultVal{x.Star}}, // <- this
        },
    }}); nil != err {
        panic(err)
    }
    err = txn.Commit(ctx)
    assert.NoError(t, err)
}

理论要掌握,实操不能落!以上关于《从 Dgraph 中使用 dgo API 删除 NQuad 数据》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>