dgraph 创建节点和边的时候判断节点是否存在,如果存在,就不创建,如果不存在,则创建

neo4j里面有一个merge的操作,能够自动帮助我们来判断节点和边在数据库里面属否存在,dgraph有没有呢,答案是有的,就是upsert,我的示例代码:

upsert {
      query {
        var(func: eq(person_id, "xxx")) {
          Person as uid
        }
        var(func: eq(company_id, "yyy")) {
          Company as uid
        }
      }
      mutation {
          set {
           uid(Person) <name> "罗志祥" .
           uid(Person) <person_id> "xxx" .
           uid(Person) <manager> uid(Company) (position="CEO") .
           uid(Person) <dgraph.type> "Person" .
           uid(Company) <name> "无名公司" .
           uid(Company) <dgraph.type> "Company" .
           uid(Company) <company_id> "yyy" .
          }
      }
    }

来看看官网怎么解释的:

To use upsert operations on a predicate, specify the @upsert directive in the schema. When committing transactions involving predicates with the @upsert directive, Dgraph checks index keys for conflicts, helping to enforce uniqueness constraints when running concurrent upserts.

我的schema为:

<person_id>: string @index(exact) @upsert .
    <name>: string @index(term) .
    <company_id>: string @index(hash) @upsert .

是不是很简单呢。

怎么验证呢,多moute几次,然后用下面的语句查一下,看有没有重复:

{
   data(func: eq(person_id, "xxx")) {
     name
    person_id
     manager @facets(orderasc:position) {
       name
      company_id
     }
   }
}

参考文献

[1]. https://dgraph.io/docs/master/mutations/#upsert-block

[2].External IDs and Upsert Block. https://dgraph.io/docs/mutations/#external-ids-and-upsert-block

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民小飞侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值