• DQL2.2.开始使用Dgraph基本操作


    翻译自:这里

    之前的入门教程中,我们学习了Dgraph的一些基础知识。包括如何运行数据库、添加新节点和谓词以及查询它们。

    在本教程中,我们将构建上面的Graph,并学习使用节点的UID(通用标识符)进行操作的更多信息。具体来说,我们将了解:

    • 使用它们的uid进行谓词的查询、更新和删除。
    • 在现有节点之间添加一条边。
    • 向现有节点添加新谓词。
    • 遍历Graph图

    首先,让我们创建我们的Graph。

    转到Ratel的突变选项卡,将下面的突变粘贴到文本区域中,然后单击Run。

    {
      "set":[
        {
          "name": "Michael",
          "age": 40,
          "follows": {
            "name": "Pawan",
            "age": 28,
            "follows":{
              "name": "Leyla",
              "age": 31
            }
          }
        }
      ]
    }
    

    查询使用uid

    可以通过节点的UID进行查询。内置函数uid以uid列表作为可变参数,因此您可以传递一个(例如uid(0x1))或您需要的任意多个(例如uid(0x1, 0x2))。

    它返回作为输入传递的相同uid,无论它们是否存在于数据库中。但是,只有当uid及其谓词都存在时,才返回所请求的谓词。

    让我们看看实际的uid函数。

    首先,让我们复制名称为Michael节点的UID。

    转到查询选项卡,键入下面的查询,然后单击Run。

    {
      people(func: has(name)) {
        uid
        name
        age
      }
    }
    

    现在,从结果中复制Michael的节点的UID。

    在下面的查询中,将占位符MICHAELS_UID替换为刚才复制的你自己实例中的UID(例如这里例子的是:0x8),然后运行查询。

    {
        find_using_uid(func: uid(MICHAELS_UID)){
            uid
            name 
            age
        }
    }
    

    注意: MICHAELS_UID在图像中显示为0x8。您在机器上获得的UID可能有不同的值。

    您可以看到uid函数返回与Michael的uid匹配的节点。

    更新谓词

    还可以使用UID更新节点的一个或多个谓词。

    迈克尔最近庆祝了他的41岁生日。我们把他的年龄更新到41岁。

    转到mutate选项卡并执行突变。同样,不要忘记将占位符MICHAELS_UID替换为你自己的Michael节点的实际UID。

    {
      "set":[
        {
          "uid": "MICHAELS_UID",
          "age": 41
        }
      ]
    }
    

    我们之前使用set来创建新节点。但是在使用现有节点的UID时,它更新其谓词,而不是创建新节点

    你可以看到迈克尔的年龄被更新到41岁。

    {
        find_using_uid(func: uid(MICHAELS_UID)){
            name 
            age
        }
    }
    

    类似地,您还可以向现有节点添加新的谓词。因为对于Michael的节点来说谓词国家不存在,所以它创建了一个新的谓词国家。

    {
      "set":[
        {
          "uid": "MICHAELS_UID",
          "country": "Australia"
        }
      ]
    }
    

    在现有节点之间添加一条边

    您还可以使用现有节点的uid在它们之间添加一条边。

    比方说,让Leyla跟随(指向)Michael。

    我们知道它们之间的关系必须通过在它们之间创建下面的边来表示。

    首先,让我们从Ratel中复制Leyla和Michael的节点uid。

    现在,将占位符LEYLAS_UID和MICHAELS_UID替换为您复制的自己机器上的uid值,并执行突变。

    {
      "set":[
        {
          "uid": "LEYLAS_UID",
          "follows": {
            "uid": "MICHAELS_UID"
          }
        }
      ]
    }
    

    遍历边

    图数据库提供了许多不同的功能。遍历就是其中之一。

    遍历可以回答与节点之间关系相关的问题或查询。因此,像这样的问题,Michael跟随谁?通过遍历下面的关系得到答案。

    让我们运行一个遍历查询,然后详细理解它。

    {
        find_follower(func: uid(MICHAELS_UID)){
            name 
            age
            follows {
              name 
              age 
            }
        }
    }
    

    这里是结果。

    查询有三个部分:

    • 选择根节点。 首先,您需要选择一个或多个节点作为遍历的起点。这些被称为根节点。在上面的查询中,我们使用uid()函数选择为Michael创建的节点作为根节点。
    • 选择要遍历的边 您需要指定要遍历的边,从所选的根节点开始。然后,遍历,沿着这些边,从一端到另一端的节点。在我们的查询中,我们选择从Michael的节点开始遍历下面的边。遍历返回Michael通过下面这条边连接到该节点的所有节点。
    • 指定要返回的谓词 因为Michael只指向一个人,所以遍历只返回一个节点。这些是第2级节点。根节点构成了第1级的节点。同样,我们可以指定从第2级节点返回哪些谓词。

    您可以扩展查询以利用2级节点,并进一步深入地遍历Graph。让我们在下一节中探讨这个问题。

    多层次的遍历

    第一级遍历返回people,跟着的是Michael。下一层的遍历进一步返回他们依次跟随的人(Michael跟随的人...)。

    这个模式可以重复多次以实现多级遍历。当我们遍历Graph的每一层时,查询的深度将增加1。这时我们就说这个查询很深!

    {
      find_follower(func: uid(MICHAELS_UID)) {
        name 
        age 
        follows {
          name
          age
          follows {
            name 
            age
          }
        }
      }
    }
    

    下面是最后一个查询扩展的另一个示例

    {
      find_follower(func: uid(MICHAELS_UID)) {
        name 
        age 
        follows {
          name
          age
          follows {
            name 
            age
            follows {
              name 
              age
            }
          }
        }
      }
    }
    

    这个查询真的很长!查询有四个层次。换句话说,查询的深度是4。如果你问,难道没有一个内置的函数可以让多级深度查询或遍历变得简单吗?

    答案是肯定的!这就是recurse()函数所做的。让我们在下一节中探讨这个问题。

    递归遍历

    递归查询使得执行多级深度遍历更加容易。它们让您轻松遍历Graph的一个子集。

    通过下面的递归查询,我们实现了与上一个查询相同的结果。但是,有了更好的查询体验。

    {
      find_follower(func: uid(MICHAELS_UID)) @recurse(depth: 4) {
        name 
        age
        follows
      }
    }
    

    在上面的查询中,递归函数从Michael的节点开始遍历图。您也可以选择任何其他节点作为起始点。depth参数指定遍历查询应该考虑的最大深度。

    让我们在将占位符MICHAELS_UID替换为Michael的节点UID之后运行递归遍历查询。

    删除一个谓词

    可以使用删除突变语句删除节点的谓词。这是删除突变的语法,删除一个节点的任何谓词,

    {
        delete {
            <UID> <predicate_name> * .
        }
    }
    

    使用上面的突变语法,让我们组成一个删除突变。让我们为Michael删除节点的年龄谓词。

    {
      delete {
        <MICHAELS_UID> <age> * .
      }
    }
    

  • 相关阅读:
    mxGraph
    DrawIO二次开发(一)
    关于使用Draw.io画数据库E-R图的说明
    流程图软件draw.io值得你拥有
    diagrams
    http://www.avaloniaui.net/
    Qt音视频开发1-vlc解码播放
    Codeforces Round #548 (Div. 2) D 期望dp + 莫比乌斯反演
    线程
    牛客练习赛89E-牛牛小数点【数论】
  • 原文地址:https://www.cnblogs.com/no-celery/p/15656131.html
Copyright © 2020-2023  润新知