ngql语法问题

请问在变长模式下,且不知道路径长度,仅知道路径长度不超过10,想获取到包含路径上所有边属性的列表,如:
match p=(v:ents)-[e:rels1…10]->(v1:ents)-[e1:rels1…10]->(v2:ents)
return [e[0].label,e[1].label,e[2].label,…,…]
想获取到return的值,且不能按上述来写,请教ngql是否支持,具体应该怎样写呢?

1 个赞

结果的每一行的边属性列表是基于匹配到的某条路径还是全局返回一个列表?

可以是基于单条路径,label1,2,3由e这条边产生,label4,5,6由e1这条边产生

match p=(v:ents)-[e:rels*1..10]->(n)  return p,[x in e | x.label]

e 和 e1 是区分不出来的

可以直接 return p,
然后在自己的程序解析path对象,

for (i in 0 until rs.rowsSize()) {
                    val record = rs.rowValues(i)
                    val values = record.values()
                    val value = values[0]

                    val asPath = value.asPath()
                    asPath.nodes.map { n ->
                        // TODO: n = 点  
                    }

                    asPath.relationships.map { r ->
                        // TODO: r = 边 
                    }
                }

:+1: 应该是可行的。不过如果语句直接给你路径上所有边属性的集合,不就不用你解析 path 了吗

relationships(path) 可能是你要找的
https://docs.nebula-graph.com.cn/2.5.0/3.ngql-guide/6.functions-and-expressions/6.list/

relationships(path) 不就是 e 吗?为什么还要从 path 反过来拿边?

return relationships(path) 确切地说返回的是边列表,已经不用从path拿了。
之前说解析path对象是因为 return p。
return p 返回的结果包含了路径上所有的点、边

1 个赞

变长或多步的情况 e 就是边列表。
用到 relationships 的场景除非是 pattern 比较复杂,又要对路径上的所有边做整体处理,这里的 pattern 比较简单就没必要,因为 relationships 也是开销

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。