求助大佬,GO语句的一些问题

语句:GO 1 TO 10 STEPS FROM “laoda” OVER u_d,u_a BIDIRECT WHERE src(edge) NOT IN [“laoda”] and (u_d.login>50000) YIELD distinct(src(edge)) AS destination;

结果:
image

图:

选在要想结果是laoda这个点通过u_d这个边向外无须扩散,而且要通过边的属性进行过滤。如图,从laoda扩散laoer这个边与laoda最近的边是不符合条件的,语句如何写?

无限扩散,不设定步数对吗

限定了步数,GO 1 TO 10 STEPS。大佬能否赐教?

没看懂呢,能不能展开讲讲?

我现在想要实现是效果是这样的,如上图,节点laoda->dev_ 1 u_d的login是 1652862835 ,节点laosi->dev_1 u_d的login是1652863716,节点 laoer->dev_1 u_d的login是40000 ,laoer->dev_2 u_d的login是60000 ,从laoda开始,获取与laoda通过u_d边相连,且相连的u_d.login>50000的节点。使用上边的语句也把laoer查出来了,但是laoda->dev_1<-laoer 上laoer->dev_1 u_d上的login是40000,并不符合>50000的过滤条件,期望的结果是只查询出 laoda->dev_1<-laosi 这条路径。

我理解一下,需求是:
1)从laoda出发,
2)经过所有u_d边,且边属性login>50000,
3)返回路径中所有的点(包括laoda),要去重

GO 1 TO 10 STEPS FROM “laoda” OVER u_d BIDIRECT
WHERE u_d.login>50000
YIELD distinct(src(edge))
这样?

是的。按照1)2)3)的条件,laoer这个点是不符合条件的。因为dev_1<-laoer的u_d.login=40000。但是查询出来的节点包含laoer,怎么把这种点去除?

db初始化:

CREATE SPACE test(partition_num=2,replica_factor=1,vid_type=FIXED_STRING(64));

use test;
CREATE TAG t1(name string);
CREATE TAG t2(name string);
CREATE TAG t3(name string);
CREATE EDGE u_d(login int64);
CREATE EDGE u_a(login int64);

INSERT VERTEX t1(name) VALUES "laoda":("laoda");
INSERT VERTEX t1(name) VALUES "laoer":("laoer");
INSERT VERTEX t1(name) VALUES "laosan":("laosan");
INSERT VERTEX t1(name) VALUES "laosi":("laosi");
INSERT VERTEX t2(name) VALUES "dev_1":("dev_1");
INSERT VERTEX t2(name) VALUES "dev_2":("dev_2");
INSERT VERTEX t3(name) VALUES "account_1":("account_1");

INSERT EDGE u_a(login) VALUES "laoda"->"account_1":(10000);
INSERT EDGE u_d(login) VALUES "laoda"->"dev_1":(1652862835);
INSERT EDGE u_a(login) VALUES "laosi"->"account_1":(20000);
INSERT EDGE u_d(login) VALUES "laosi"->"dev_1":(1652863716);
INSERT EDGE u_d(login) VALUES "laoer"->"dev_1":(40000);
INSERT EDGE u_d(login) VALUES "laoer"->"dev_2":(60000);
INSERT EDGE u_d(login) VALUES "laosan"->"dev_2":(10000);
INSERT EDGE u_d(login) VALUES "laosan"->"dev_2":(20000);

实现方法:
一个语句不好写出来,你可以在代码里面排除。

ListA = GO 1 TO 10 STEPS FROM "laoda" OVER u_d,u_a BIDIRECT WHERE  u_d.login<=50000 YIELD  distinct(src(edge)) AS dst;
 
ListB = GO 1 TO 10 STEPS FROM "laoda" OVER u_d,u_a BIDIRECT WHERE src(edge) NOT IN ["laoda"] and (u_d.login>50000) YIELD distinct(src(edge)) AS destination;

result=ListB - ListA

大佬,nebula边属性过滤能不能指定过滤的类型,比如通类型的边属性某一属性全部大于,全部小于,或者至少一个大于小于,这种操作?

这是错别字,同类型吗?

同类型

为啥不用 LOOKUP 加个 WHERE 参考这个

https://docs.nebula-graph.com.cn/3.1.0/3.ngql-guide/7.general-query-statements/5.lookup/#_5

大佬能就我上边的图和期望结果帮写下语句吗,我按照你说的方式研究了一下文档,没找到能达成期望效果的语句。

go from 101 over like, serve where like.likeness > 18 or serve.start_year <= 2020 这样子吗?

大佬,UNWIND 函数后边不能接管道符 | 吗?我看给的例子没有这么用的,我试了下貌似不行,如果可以的话可不可以给个小例子?

unwind确实不能和|一起用…

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