dgraph的使用总结--------dgraph简单使用1

上一篇是让大家快速安装部署dgraph,这一篇就简单介绍一下dgraph的使用。

        顺序观看,效果更佳。

dgraph官网链接,英语好的可以直接食用。https://dgraph.io/docs/tutorial-2/#deleting-a-predicate

目录

一、简单使用之突变(mutate)与查询(query)

1.1   简单介绍    

1.2  突变(Mutate)

1.3、查询  

二、基本操作

1、使用UID查询

2、使用节点的UID更新谓词

3、使用节点的UID向现有节点添加新谓词。

4、使用节点的UID在现有节点之间添加边。

5、遍历

6、多级遍历

7、递归遍历

8、删除谓词


一、简单使用之突变(mutate)与查询(query)

1.1   简单介绍    

        在图形数据库中,概念或实体表示为节点。可能是销售、交易、地点或个人,所有这些实体都表示为图形数据库中的节点。

        边表示两个节点之间的关系。上图中的两个节点代表人:Karthic和Jessica。您还可以看到这些节点具有两个相关属性:名称和年龄。节点的这些属性在Dgraph中称为谓词。

        Karthic跟着Jessica。它们之间的以下边缘表示它们的关系。连接两个节点的边在Dgraph中也被称为谓词,尽管这条边指向另一个节点,而不是字符串或整数。

1.2  突变(Mutate)

Dgraph中的创建、更新和删除操作称为突变。

Ratel使运行查询和突变变得更容易。我们将在教程系列中探索更多的功能。

让我们转到“突变”选项卡,将以下突变粘贴到文本区域。现在不要执行它!

{
  "set": [
    {
      "name": "Karthic",
      "age": 28
    },
    {
      "name": "Jessica",
      "age": 31
    }
  ]
}

 上面的查询创建了两个节点,一个对应于与“set”关联的每个JSON值。但是,它不会在这些节点之间创建边。

对突变进行一个小的修改就能修复它,因此在它们之间形成了一个边缘。

{
  "set": [
    {
      "name": "Karthic",
      "age": 28,
      "follows": {
        "name": "Jessica",
        "age": 31
      }
    }
  ]
}

让我们执行这个突变。单击Run(运行)并启动! 

 可以在响应中看到,已经创建了两个UID(通用标识符)。响应的“uids”字段中的两个值对应于为“Karthic”和“Jessica”创建的两个节点。

1.3、查询  

                现在,让我们运行一个查询来可视化刚刚创建的节点。我们将使用Dgraph的has函数。表达式has(name)返回具有与其关联的谓词名称的所有节点。

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

这次转到“查询”选项卡,输入上面的查询。然后,单击屏幕右上方的Run(运行)。

只需单击其中任何一个,注意节点被分配了UID,与我们在突变响应中看到的UID相匹配。

您还可以在右侧的JSON选项卡中查看JSON结果。

了解查询 

查询的第一部分是用户定义的函数名。在我们的查询中,我们将其命名为people。但是,您可以使用任何其他名称。

func参数必须与Dgraph的内置函数关联。Dgraph提供了各种内置功能。has函数就是其中之一。查看查询语言指南,了解Dgraph中其他内置函数的更多信息。

查询的内部字段name,age类似于SQL select语句或GraphQL查询中的列名!

类似地,也可以使用has函数查找具有年龄谓词的所有节点。 

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

二、基本操作

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

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

  • 查询和更新节点,使用其UID删除谓词。
  • 在现有节点之间添加边。
  • 向现有节点添加新谓词。
  • 遍历图形。

首先,让我们创建Graph。

转到Ratel的变异选项卡,将下面的变异粘贴到文本区域,然后单击运行。

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

1、使用UID查询

节点的UID可用于查询它们。内置函数uid将uid列表作为可变参数,因此您可以传递一个(例如uid(0x1))或根据需要传递多个(例如uid(0x1,0x2))。

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

让我们看看uid函数的作用。

首先,让我们复制为Michael创建的节点的UID。

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

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

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

2、使用节点的UID更新谓词

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

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

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

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

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

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

同样,您也可以向现有节点添加新谓词。由于Michael的节点不存在谓词国家,因此它创建了一个新的节点。

3、使用节点的UID向现有节点添加新谓词。

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

4、使用节点的UID在现有节点之间添加边。

还可以使用现有节点的UID在现有节点之间添加边。

比方说,莱拉开始跟着迈克尔。

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

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

现在,用复制的占位符替换占位符LEYLAS_UID和MICHAELS_UID,并执行突变。

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

5、遍历

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

遍历节点与节点之间的关系相关的问题或查询。因此,像这样的问题,迈克尔追随谁?通过遍历以下关系来回答。

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

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

查询由三部分组成:

选择根节点。

1、首先,需要选择一个或多个节点作为遍历的起点。这些称为根节点。在上面的查询中,我们使用uid()函数选择为Michael创建的节点作为根节点。

2、选择要遍历的边

您需要指定要遍历的边,从选定的根节点开始。然后,遍历沿着这些边从一端移动到另一端的节点。

在我们的查询中,我们选择从Michael的节点开始遍历以下边。遍历将通过下面的边为Michael返回连接到该节点的所有节点。

3、指定要返回的谓词

由于Michael只跟踪一个人,遍历只返回一个节点。这些是2级节点。根节点构成了一级节点。同样,我们需要指定要从二级节点返回的谓词。

6、多级遍历

第一级遍历返回Michael后面的人。下一级遍历进一步返回他们依次跟随的人。

该模式可以重复多次以实现多级遍历。当我们遍历Graph的每个级别时,查询的深度增加一

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

这个查询真的很长!如果你问,难道没有一个内置函数可以让多级深度查询或遍历变得容易吗? 

 答案是肯定的!这就是recurse()函数的作用。

7、递归遍历

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

通过以下递归查询,我们可以获得与上次查询相同的结果。但是,具有更好的查询体验。

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

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

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

8、删除谓词

可以使用删除突变删除节点的谓词。下面是删除突变的语法,用于删除节点的任何谓词,

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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值