请问 over 的语义是啥?

新手刚开始使用nebula,在文档中没有发现对 over 语义的描述。比如下面这个语句:

go 2 steps from "u:1" over play BIDIRECT WHERE play._dst!="u:1" and play._src == "g:0" YIELD play._dst as id | limit 100;

本意是查询查询在玩相同游戏的玩家,但是这里的 over play 是指的最后一条边,还是途中所有的边呢,如果是最后一条边,那么后面的 where 条件是否只是对最后一条边生效呢?

over 后面跟着你要遍历的边,比如你要找 A 和 B 的好友,就是 friend 边。

就像这条语句,那么where 指定的条件是play._dst!="u:1" and play._src == "g:0" ,这两个条件是对所有的边都生效吗,符合条件的边才能接着遍历?但是我测下来,play._src == "g:0" 这个条件只对最后一条边生效了。还望大佬解惑。

go 2 steps from "u:1" over play BIDIRECT \
WHERE play._dst!="u:1" and play._src == "g:0"  \
YIELD play._dst as id | limit 100;

这个是边 player 的一个属性呀,不是对所有的边都生肖的。:thinking: 你可以理解为 table 中的一个 key 的属性值

:rofl:还是不太理解,对于这种情况,应该只有e2这条边才满足play._src == "g:0",但是为何e1这条边可以通过where条件的判断呢?因为我查询的时候,用这个语句可以查出u:2
image

你图上不是写名了 e1 的类型是 player 嘛。:thinking: 举个例子啊,虽然你叫 user8,但是你类型是不是一个 people,所以用 people.age 还是可以来找你的,就是这个意思,虽然 e1 叫 e1 但是它的类型是 player

不好意思,还是有点不明白,我是不是就可以理解:虽然e1不满足where条件,但是因为它是play的边类型,所以这条边会被遍历,然后where条件会作用于最后一条边。因为我where条件里面已经明确指出了play._src == “g:0”,而e1的_src应该是u:1才是。

对对,就是先捞边的类型,然后再筛选(where 语句筛选)返回符合 Where 条件里的结果。

理解了,就是over后面的where语句跟边相关的筛选其实是作用于最后一条边,如果要对中途的边进行筛选,是否就要使用管道来解决呢?

对,你可以看下这个例子,:thinking: 建议你可以去跑下我们篮球数据集,来熟悉下语法

1 个赞

好的,谢谢大佬 :+1:

:joy: 一起学习学习,如果你觉得上面那个回复解决了你的问题,可以勾选为 【解决方案】哈

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