go 语句如何写

  • nebula 版本:v2.6.1
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否为线上版本:Y

目前有这种拓扑结构
image

A 是一种tag, B,C,D,E,F 是一种tag,和A有一种隶属于的REL1关系。
B,C,D,E,F 之间又存在关系REL2。

需求是:
给定了C 和A 的VID, 如何通过关系REL2 找到和C 同样隶属于A的其他节点

目前两种方案:

  1. 不改动schema

go from vid(c) over REL2 bidirect yield dst(edge) as id | go from $-.id over REL1\

where dst(REL1) == vid(A)

但是这个方案总觉得多做了一层查询,多了一层性能浪费,请问有什么较好的写法吗?

  1. 修改schema 添加和A 的关系到节点属性上,改动太大,暂时不考虑了。
MATCH (v)-[:REL1]-(n:tag2) where id(v)=="A"
RETURN n

是根据A 和 C 找到和C 有关系的B,D,E
这个写法是找到和A 有关系的,不满足需求的。

C 是已知的吗

是的,a, c vid 已知

MATCH (v)-[:REL1]-(n:tag2) where id(v)=="A"
MATCH (m) where id(m)=="C" and (n)-[:REL2]-(m)
RETURN n

这个和下面的没啥特别大的区别,都是需要寻找两次吧

go from vid(c) over REL2 bidirect yield dst(edge) as id | go from $-.id over REL1\

where dst(REL1) == vid(A)

你的需求应该是需要找两次的。

收到,谢谢

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