【问题标题】:Dgraph: create edge without prior knowledge of uidDgraph:在没有事先了解uid的情况下创建边缘
【发布时间】:2020-07-31 18:08:22
【问题描述】:

我正在尝试使用 dgraph,到目前为止,我最大的困难是在两个对象之间创建一条边,而无需事先了解它们的 uid(用于批量加载)。 示例 - 让我们有两种类型 - 父节点和子节点,唯一的区别是子节点始终是叶节点,因此架构可能类似于

<name>: string .
<age>: int .
<children>: [uid] .

type Parent {
    name
    age
    children
}

type Child {
    name
    age
}

现在我想插入三个节点 - 两个父节点和一个子节点 - 并在它们之间创建一条边,所有这些都使用一个查询,而无需事先查询 uid。我想像这样:

{
    "set": [
        {
            "name": "Kunhuta",
            "age": 38,
            "dgraph.type": "Parent"
        },
        {
            "name": "Vendelin",
            "age": 41,
            "dgraph.type": "Parent"
        },
        {
            "name": "Ferko",
            "age": 14,
            "dgraph.type": "Child",
            "Parent": [
                {
                    "name": "Kunhuta"
                },
                {
                    "name": "Vendelin"
                }
            ]
        }
    ]
}

(假设名称是唯一的类型标识符)

是否有可能在 dgraph 中以某种方式这样做?

【问题讨论】:

    标签: dgraph


    【解决方案1】:

    因此,如果您要向图中添加新节点并希望使用新边将它们相互连接,您可以使用空白节点来执行此操作。

    来自 dgraph 文档:https://dgraph.io/docs/v1.0.8/mutations/

    突变中的空白节点,写成_:identifier,标识突变中的节点

    这是添加了空白节点的示例:

    {
        "set": [
            {
                "uid": "_:kunhuta",
                "name": "Kunhuta",
                "age": 38,
                "dgraph.type": "Parent"
            },
            {
                "uid": "_:vendelin",
                "name": "Vendelin",
                "age": 41,
                "dgraph.type": "Parent"
            },
            {
                "uid": "_:ferko",
                "name": "Ferko",
                "age": 14,
                "dgraph.type": "Child",
                "Parent": [
                    {
                        "uid": "_:kunhuta",
                        "name": "Kunhuta"
                    },
                    {
                        "uid": "_:vendelin",
                        "name": "Vendelin"
                    }
                ]
            }
        ]
    }
    

    当您想要将新节点连接到图中的现有节点时,事情会变得有些困难。例如,假设您提交了上述突变,然后您想向“Kunhuta”添加一个新孩子。您需要查询“Kunhuta”的现有 uid 并在新的 set 突变上使用该 uid 来添加您的孩子。

    另外,我会在名称之外使用某种形式的唯一标识符来帮助查询uid。如果你最终在你的图表中添加了另一个“Kunhuta”,你怎么知道哪个是真正的父母?出于这个原因,dgraph 建议添加一个外部标识符(通常是一个 uuid)并在你的架构中调用它xid

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2016-07-13
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多