Star

nebulagraph v2.0.0-beta 查询并返回一类顶点的属性以及其所有关系的属性的正确姿势?

问题:
假设 某个顶点有多度关系【大于2度】,如何一次性获取到该顶点的所有属性以及每一层关联的顶点的属性?对应到dgraph的graphql语句这样写:

image

dgraph返回的数据是一个嵌套的json格式的数据
在nebula-graph中,如何优雅地实现这种查询?
能否给出具体的使用示例?

可以参考go的语法: https://docs.nebula-graph.com.cn/manual-CN/2.query-language/4.statement-syntax/2.data-query-and-manipulation-statements/go-syntax/

试过用 GO 加管道的方式,貌似只能比较方便获取到最后一层的数据。如果有多层关系,使用 GO 语法如何同时获取到每一层上的点的全部属性数据呢?

第一想法是可以用match的viable-length-path,同时返回 p=xxxpath 和 length(p)
不过beta似乎这个部分还没写完。
@yee
第二想法是

$var1=go 1 step
$var2= go 2 steps

yield $var1.tag.prop, $var2.tag.prop

go n steps 返回的是 dst 的 vid 吧,这里要的是 dst 的全部属性,另外好像也没有支持 $var1.tag.* 之类的语法

你说的是这样吗?


beta现在支持变长边,但必须要设置一个跳数上限,比如截图中的2,下限可以不设置。
需要注意的是,跳数多了可能影响服务甚至导致崩溃,功能刚开发出来,还没有经过系统优化,可以先自己测一下是不是你需要的
文档还在开发中,示例语句:

MATCH (v:player{name:"Tim Duncan"})-[e*..2]-(v2) RETURN DISTINCT v2

这样只是拿 v2 的哦,如果还要同时拿 v ,是不是要查两遍。

举个例子,假如关系的这样的: v -> [*] -> v2 -> [*] -> v3,v -> [*] -> v4 -> [*] -> v5 ,需要拿到数据张这样:

{
    v.prop1
    v.prop2
    v2: [
        {
            v2.prop1
            v2.prop2
            v3: [
                {
                    v3.prop1,
                    v3.prop2
                }
            ]
        },
        {
            v2.prop1
            v2.prop2
            v3: [
                {
                    v3.prop1,
                    v3.prop2
                }
            ]
        }
    ],
    v4: [
        {
            v4.prop1,
            v4.prop2,
            v5: [
                {
                    v5.prop1,
                    v5.prop2
                }
            ]
        }
    ]
}

那么在 nebulagraph 中应该如何查询?

这就是 v 和 v2, 再带上 length§就行了
graphql我不熟

RETURN v, v2就好了

如果下面还有 v3, v4 ,这样查询是不是就会出现很多冗余的数据,具体的数据行数是他们之间的笛卡尔积?

用nodes(p)

MATCH p=(v:player{name:"Tim Duncan"})-[*..3]->() RETURN nodes(p)

再加个length(p) 返回距离

浙ICP备20010487号