求两种类型之间的所有边

nebula 版本:V3.3.1

目前建立了两种类型的tag:player 和team。有多个player和team。
希望一次性查询到所有的player和team之间的关系,并删除。

尝试用match方法

match (v1:player)-[e]-(v2:team) return e limit 3

执行报错如下:-1005:scan vertices or edges need to specify a limit number, or limit number can not push down

目前没有建立索引,采用了limit方式。不知是哪里不对。

explain match (v1:player)-[e]-(v2:team) return e limit 3

执行下,生成下执行计划再贴过来看看哈。

btw。- -,因为 match 各个版本使用会有细微的区别,麻烦补充下 NebulaGraph 的内核版本。

nebula 版本:V3.3.1
由于内网环境,explain如下图

社区版本目前不支持match (v1:player)-[e]-(v2:team) return e limit 3 ,。 可以在 player 上建立一个索引,然后使用

可以看看文档关于 Match 的注意事项:https://docs.nebula-graph.com.cn/3.3.0/3.ngql-guide/7.general-query-statements/2.match/

的确是,增加了索引之后就可以了。
看了doc文档,match基本上都需要先建立索引,但又提示索引会影响性能,所以有些困惑

困惑是什么?

因为看到doc上说见索引会影响写入性能,要慎重,所以默认都先没有建索引。
然后在使用match的时候索引又是必须的。。。

那。。。也只能建了吧。。。

当遍历所有点或边时,例如MATCH (v) RETURN v LIMIT N、MATCH ()-[e]->() RETURN e LIMIT N。

这里我下面的语句应该是符合上面的条件的呀

match (v1:player)-[e]-(v2:team) return e limit 3

可以看看这里哦~文档更新了一下,只允许 match (v:player) return v limit nmatch ()-[e:follow]->[] return e limit n,不支持一起用哦。还是要创建索引的~

1 个赞

发现match的话,是不支持管道符的。

我的场景其实原来建了a-b的关系,现在需要修改为a-c-b,于是想删除原来a-b的所有边。最后我删除了所有的a类型的点(加上with edge)

大佬还有其他办法么?

是的,目前 match 不支持管道。
目前也不支持基于变量的批量删除。
可以用基于 id 的批量删除,类似:

lookup on player yield id(vertex) as vid 
| go from $-.vid over like yield id($^) as src,id($$) as dst 
| delete edge like $-.src->$-.dst

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