nebula 版本:v2.6.1
studio 版本:v3.1.0
部署方式 :单机
安装方式:Docker
是否为线上版本: N
需求是查询给定的边是否存在,用的是basketballplayer数据集
查询语句如下:
$b_0 = FETCH PROP ON serve “player100” → “team204”;
$b_1 = FETCH PROP ON serve “player138” → “notExistVertex”;
yield size($b_0) != 0 AND size($b_1) != 0 as exist;
“player138” → "notExistVertex"边是不存在的,期望返回false
但用studio多次查询有的时候返回true,有的时候返回false
steam
2021 年12 月 3 日 07:17
2
你用 Console 执行下相同的语句,也是一样的结果吗?
insert的数据能否给出一部分用于复现和排查bug?
就是你们提供的basketballplayer数据集,我是用studio导入的
hetao
2021 年12 月 6 日 07:12
8
我们同事暂未复现这一情况,能提供一下完整的创建 schema 以及插入数据的过程来复现下
这边成功复现了,fetch的结果是稳定的,应该是$b_0和$b_1两个变量的值出了些问题,还在排查。
我目前的需求是判断给定的一系列点和边是否存在,如果用上面的语句只判断给定的点是否存在,没有出现未定义行为,判断边的时候出现了
大佬们,这个问题怎么解决呢?或者说判断给定的一系列点和边是否存在应该怎么查比较好?
kyle
2021 年12 月 8 日 08:31
16
这个问题是已知的,和 variable 在实现层生命的周期管理有关。类似的用法我们认为是不合理的,所以在最新的版本 yield $var 的语法已经被禁用。
你的需求可以用其他更好方式解决,比如:
MATCH (v:player)-->(n:team)
WHERE (v.name=="player100" and n.name=="team204") or (v.name=="player138" and n.name=="notExistVertex")
RETURN case count(*) when 0 then false else true end as result
1 个赞
我们的关系链比较长,edge_type也不一样。目的是判断整个关系链存不存在,如果用match的话对性能是有影响的,因此想着是判断关系链上的所有点和边是否存在。如果变量和yield不能一起用的话,还是按之前的思路,用fetch加管道符来连接应该是可以的吧
对,比如这样的(:player)-[:friend *0…50]->(v:player)-[]->(n:team)-[]->(a:city)-[]->(b:country)
kyle
2021 年12 月 8 日 10:05
20
那这样的需求 go 语句根本无法满足,go 语句的路径只支持单步和多步相同边类型的路径,这样的 pattern 只能用 match 语句实现。