match语句能否过滤边的属性

  • nebula 版本:(为节省回复者核对版本信息的时间,首次发帖的版本信息记得以截图形式展示)
  • 部署方式(分布式 / 单机 / Docker / DBaaS):分布式
  • 是否为线上版本:N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述

场景:
nGQL:
match p = (v) -[e:A0100|A0110|B01001…6]- (v1) where id(v)==“100” and v1.ins_num ==“x04” return e
返回结果:


需求:
边e包含多种类型,当前需要过滤A0100或者A0110的属性hold_wght_ratio >某个值,该如何实现?
我想到使用:match p = (v) -[e:A0100|A0110|B0100
1…6]- (v1) where id(v)==“100” and v1.ins_num ==“x04” and all(rel in relationships(p) where rel.hold_wght_ratio >2.0) return e 结果返回的值为空

  • 相关的 meta / storage / graph info 日志信息

A0100的边有hold_wght_ratio属性,B0100没有

你好,我看你B0100的schema中有position,这是其他两种边没有的属性,这种情况你可以用
match p = (v) -[e:A0100|A0110|B01001…6]- (v1) where id(v)==“100” AND v1.ins_num ==“x04” AND (e.hold_wght_ratio >2.0 OR e.position!="") return e


仍然返回空 :disappointed_relieved:


这是原n’GQL返回结果的图。

我在本地模拟了这个情况没有问题,那你试一下
match p = (v) -[e:A0100|A0110|B01001…6]- (v1) where id(v)==“100” AND v1.ins_num ==“x04” AND e.hold_wght_ratio >2.0 return e
这样预期的结果是只返回A0100类型的边,B0100会被过滤掉


仍然为空 :frowning:

再去掉个条件试试?

去掉啥条件,边过滤的条件吗?去掉就是一开始返回的结果路径。

看了下数据,这样找不到是因为走不到你指定的终点。
先尝试个简单点的query吧,从x01出发不限制终点
match (v) -[e:A0100|A0110|B0100]- (v1) where id(v)==“100” AND (e.hold_wght_ratio >2.0 OR e.position!="") return e

:nauseated_face: :nauseated_face: again。
我发现只要where过滤条件包含对边的过滤,返回都是空;我之前就以为match是不是不支持对边的属性过滤

而且基于我的需求,就是探寻两点之间的路径,终点是要保留的。

我之前本地测试的都是单步情况,多步的话语法要改一下
match p = (v) -[e:A0100|A0110|B01001…6]- (v1) where id(v)==“100” AND v1.ins_num ==“x04” AND ALL(e in e WHERE e.hold_wght_ratio >2.0 OR e.position!="") return e

作为参考,这是我在本地的query:
match (v)-[e*1..2]-(v2) where id(v)=="Tim Duncan" and all(e in e where e.likeness < 80 or e.start_year > 0) return e

1 个赞

理解用法了,感谢 :clap:

不客气 :slightly_smiling_face: