【问题标题】:How to delete all nodes with a given type?如何删除给定类型的所有节点?
【发布时间】:2020-08-11 21:07:42
【问题描述】:

https://dgraph.io/tour/schema/8/

显示一些删除选项

  1. 删除单个三元组
  2. 删除给定边的所有三元组
  3. 删除给定节点的所有三元组

现在我想删除给定类型节点的所有三元组。我假设这是通过某种查询组合来完成的,该查询选择给定类型的节点,然后对每个节点进行突变。我在教程中找不到这方面的示例。

假设我想删除 Country 类型节点的所有三元组。

我知道如何为节点选择 uid:

    {  
      query(func: has(<dgraph.type>)) @filter(eq(<dgraph.type>, "Country")) {
        uid
      }
    }

但是我如何将它与突变结合起来呢?

https://discuss.dgraph.io/t/how-to-bulk-delete-nodes-or-cascade-delete-nodes/7308

似乎要求“更新”

如何删除给定类型节点的所有三元组?

【问题讨论】:

    标签: dgraph


    【解决方案1】:

    以下 upsert 似乎有效:

    upsert {  
      query {
        # get the uids of all Country nodes
         countries as var (func: has(<dgraph.type>)) @filter(eq(<dgraph.type>, "Country")) {
            uid
        }
      }
      mutation {
        delete {
          uid(countries) * * .
        }
      }
    }
    

    【讨论】:

    • 这不能很好地扩展。 Has func 是一个太宽泛的函数。您应该改用 eq 。如果您使用 has,它将查找系统上的所有类型,然后应用过滤器。如果您使用根中已经存在的 eq,Dgraph 会立即在索引表中查找并执行操作。
    • @MichelConradoDiz 感谢提示。那么查询会是什么样子?
    • 就像countries as var(func: eq(&lt;dgraph.type&gt;, "Country") )countries as var(func: type("Country") )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多