关于自环边建模后如何在查询中使用

  • nebula 版本:3.4.0
  • 部署方式:分布式
  • 问题的具体描述
    图建模 - NebulaGraph Database 手册
    文档中提到当点属性动态增加的时候,可以使用自环边来替代点属性。
    刚好业务确实有这样的需求,但是添加完自环边之后,如何使用这个自环边来做查询过滤呢?
    比如我给点加了一个自环边x,然后我再find path 或者 GET SUBGRAPH 的时候,需要把目的点包含自环边X的给过滤掉或者忽略掉,这个ngql语句该怎么写这个where条件?

FIND PATH 可以用FIND NOLOOP PATH,
GET SUBGRAPH 试了下 where id($$) != 815677140545765099 报错了。可以查出来之后业务端 做过滤

1 个赞

find path和get subgraph,在遍历中都可以指定遍历的边类型。你只要过滤的时候不要去遍历这个边就行

我想要做到的是过滤掉不包含这个自环边的点,此时的自环边相当于这个点的一个属性,目标是把带有这个属性的点去掉

后端查询的话,查出来有几个目标点(假如有1W个),就要一次次去请求看这个点是否存在这个自环边,这样的操作如果能避免会比较好。。

1 个赞

我能想到的是把有没有自环边作为这个点的属性,查询的时候过滤这个点。
不过注意的是,find path目前不支持过滤点只支持过滤边。

但我从业务语义上理解。如果你用的是find path的话,过滤边就足够了。
因为如果把边过滤掉以后,找不到你要的目的点,自然就没有路径了,也就没有你要过滤的点了。

自环边本来就不会参与点的连通吧。我这么举个例子吧, A → B , A → C , C有个自环边类型为x,这时候我需要过滤掉C点,只返回A → B 的路径。 如果按你说的过滤边类型, A → C 这个边类型不是x,一样会被返回

自环边和属性不是等价的,没有办法完全替代,只是在部分场景下可以考虑替代,比如明确找到一个点,然后去读自环边。

你的 case 我觉得难免要使用多条语句,在客户端自己做一些处理来实现了。

我想也是的,很多操作现在只能通过客户端自己去实现,封装下都能成一个工具包了

1 个赞

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