请教大佬:如何用节点自由度作为where的查询条件呢

在使用过程中,存在这么一个需求:能够输出所有路径,路径起始节点入度为0,末节点的出度为0?
查了不少资料,无法实现需求,Match p=(n:xxx)-[]->(m:xxx) where count(m-[]->()) == 0 return p。类似这种语法是可以在neo4j支持实现的?

我也没找到表达出入个数的条件,单从您这个 query 来看,要找所有的 n–>m ,并且 n 本身 没有入的, m 没有出的,其实等价于去掉 m之中所有出现在 n 列的点 且 去掉 n 之中所有出现在 m 之中的点。

您这么取完了结果(三列,后两列是起始点和终点),再在应用代码里用条件过滤一下起始点不在 id(m)那一整列,终点不在 id(n) 一整列。能满足要求么?

MATCH p=(n:player)-[]->(m:player) return p, id(n), id(m)

另外也欢迎您来 nebula-graph repo 提我们还不支持的 openCypher 表达哈

MATCH (k)
WITH k, size((k)-[:TYPE]->()) as degree
WHERE k.Value='30 ’ AND degree > 1

2 个赞

抱歉 @nyang 现在这个语法的兼容性还有一些问题,issue:https://github.com/vesoft-inc/nebula-graph/issues/1280

感谢,这个不是nGQL语法吧.with语句不支持这种语法哦。

好的,谢谢,希望能早点支持这种功能。比如说像graphscope那样添加一个degree函数用于返回节点的自由度。

我以为你问neo4j语法怎么写

neo4j是可以实现的,本质是因为nGQL语句不支持查询作为条件,目前来看只支持一些简单的比较符号。

可以考虑类似 RedisGraph 中提供两个函数 indegreeoutdegree 来表示一个点上的边的出入度

1 个赞

但这个需要nebula的研发团队去提意见,在语法上支持才行

这样语法够不自由,毕竟要考虑边类型啥的。还时cypher更自由一点

issue raised: express/function to get degrees · Issue #1285 · vesoft-inc/nebula-graph · GitHub

这个可以满足需求,但不能直接在nebula中写,还是需要在python中写才行。这么写的问题就是不好用nebula进行可视化。

该话题在最后一个回复创建后30天后自动关闭。不再允许新的回复。