c语言sscanf函数的用法是什么
280
2022-09-20
DQL-2.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 {
使用上面的突变语法,让我们组成一个删除突变。让我们为Michael删除节点的年龄谓词。
{ delete {
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~