match MINUS | DELETE 使用

需求:查询指定tag的所有孤点,并删除该点

方案:match(v:table) return id(v) MINUS match(v:table)–() return id(v) | DELETE VERTEX $-.id(v)
结果:报错
SyntaxError: syntax error near d(v)
该如何解决

目前并不支持原生 ngql 和 cypher 语法混用,你可以把他们看成是两种语言,这样设计的原因是混用会带来很多问题。目前 match 语句是办不到的。
可以试试原生 ngql。
比如:

((lookup on table yield id(vertex) as id) MINUS (lookup on table yield id(vertex) as id | go from $-.id over * BIDIRECT yield $-.id as id)) | delete $-.id

lookup on table yield id(vertex) as id这个报语法错误,如果结果只返回点,yield id(vertex)这个为什么会有问题?

我本地测试是ok的,你用的什么版本?

版本:2.5.1

这个版本语法不一样。。

试试这个:

((lookup on table yield VertexID as id) 
MINUS 
(lookup on table yield VertexID as id | go from $-.id over * BIDIRECT yield $-.id as id)) 
| delete $-.id


还是不行

再试下这个:

((lookup on table | yield $-.VertexID as id) 
MINUS 
(lookup on table | yield $-.VertexID as id | go from $-.id over * BIDIRECT yield $-.id as id)) 
| delete $-.id

这个可以了

你好想问一下,如何查找出图数据库中会形成环的数据

同一个 pattern 同样的变量代表起点终点即可。形成环就是路径中有重复点。

MATCH p=(v)-[:E*1..10]->(v)
RETURN p

image

这个语法不行啊,起点和终点必须设置不同的别名才可以的

MATCH p=(v:tag)-[:blood*1..10]->(v)
RETURN p

你好,我们现在还有个需求是,查询某个节点【所有】的上游节点和【所有】下游节点
【目前处理方式】:GO {hop} step FROM “{vid}” OVER blood YIELD DISTINCT blood._dst as nodeList;写了一个递归调用这个语句,如果结果为空,则表示没有节点了
【问题】:血缘出现了环,例如:a->b->c->a,造成了代码死循环,因为go语句是边可以重复,所以一直能查到点。
【解决方案】:将go改成了match语法,因为match是边不能重复,但是由于生产环境数据量较大,使用match速度慢,消耗没存,这个方案就pass了,请问,这种场景有没有更好的解决方式

不需要在业务层写递归。

go 1 to 10 steps from "vid" over blood yield distinct blood._dst as downStreamNodes;

你这个还是满足不了我的需求,因为某个节点上/下游的深度是未知的,n to m step这个必须是知道深度是多少

嗯 现在所有原生的 ngql 都是需要显式指定最大步数的。
3.x 版本的 match 语句可以不需要指定最大步数
语法类似这样:

MATCH (v)-[:blood*1..*]->(n)
RETURN n
1 个赞