Nebula GO语句排除自身逻辑差异问题

  • nebula 版本:3.8.0
  • 部署方式: 分布式
  • 安装方式: RPM
  • 是否上生产环境:Y
  • 硬件信息
    • 磁盘:SSD
    • CPU、内存信息:16c128g
  • 问题的具体描述
    Nebula GO排除自身节点的逻辑有差异,是怎么考虑的?是否考虑和neo4j保持一致。
  • 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)
比如nebula存在以下数据,
节点:
(n:user_id{name:6441146}), (m:phone_number{name:"12345678"})
关系:
个人手机号码(n:user_id{name:6441146})-[:self_number]->(m:phone_number{name:"12345678"})
个人收货地址号码(n:user_id{name:6441146})-[:address_phone_number]->(m:phone_number{name:"12345678"})

GO FROM "6441146" OVER self_number YIELD dst(edge) as dst | GO FROM $-.dst OVER self_number REVERSELY YIELD properties($$).name;
nebula返回6441146

match p = (n:uid {name: 6441146})-[:self_number]-(m)-[:self_number ]-(l:uid) return l.name;
neo4j返回null

可以通过where id($$) <> $-.src 来排除自身

GO FROM “6441146” OVER self_number YIELD dst(edge) as dst | GO FROM $-.dst OVER self_number REVERSELY where id($$) <> $-.src YIELD properties($$).name;

  1. go 走的是 walk 的逻辑,match 走的是 trail 的逻辑,这个是本质的区别。关于路径的介绍,可以看:路径 - NebulaGraph Database 手册

  2. 你这个语句是加了管道符,可以认为是两条子句了。所以也不会有排除自身的逻辑
    如果要排除自身可以看二楼

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