v1:手机号节点,v2:是手机APP,v3:也是手机号节点同v1
关系如下:
查询方法:根据用户id查询到手机号节点(v1),然后再查找APP节点(v2),然后根据匹配的app再反向查询手机号节点(v3其实就是v1)如下查询:
match (u:t_user{uid:‘1001’}) -[e1:e_register]->(v1)–>(v2)<–(v3) RETURN v3;
v2节点有数据:
(admin@nebula) [data]> match (u:t_user{uid:'1001'}) -[e1:e_register]->(v1)-->(v2) RETURN v2.did, v1.mobile;
+------------------------------------------------------------------+---------------+
| v2.did | v1.mobile |
+------------------------------------------------------------------+---------------+
| "d1118" | "13120930000" |
+------------------------------------------------------------------+---------------+
v3节点没有数据(是不是bug?)
(admin@nebula) [data]> match (u:t_user{uid:'1001'}) -[e1:e_register]->(v1)-->(v2)<--(v3) RETURN v3;
Empty set (time spent 19326/19797 us)
实际上v3到v2是有数据的:
(admin@nebula) [data]> match (d:t_app{did:'d1118'})<--(m) return m
+--------------------------------------------------------------------+
| m |
+--------------------------------------------------------------------+
| ("13120930000" :t_mobile{dt: "2021-08-06", mobile: "13120930000"}) |
+--------------------------------------------------------------------+
Got 1 rows (time spent 78056/78612 us)
这里面有两种情况:
- 如果 边v1->v2 和 边v3->v2 是同一个边(v1->v2没有别的边),则
match (u:t_user{uid:'1001'}) -[e1:e_register]->(v1)-->(v2)<--(v3) RETURN v3
返回的是 Empty set,因为 v1->v2 和 v3->v2 是同一条边,查询的时候会过滤掉,又由于没有别的边,所以返回 Empty。这个在 neo4j 里也是这个逻辑。
2. 如果 v1 到 v2 有两个及以上不同的边,则上述match语句会返回这些边的起点v3(最新的版本,2.0.1版本有个bug,也不能返回所有的v3)
(root@nebula) [my_space]> insert edge t_use_1() values 13120930000->1118:()
(root@nebula) [my_space]> match (u:t_user{uid:'1001'}) -[e1:e_register]->(v1)-->(v2)<--(v3) return v3
+------------------------------------------------------------------+
| v3 |
+------------------------------------------------------------------+
| (13120930000 :t_mobile{dt: "2021-08-08", mobile: "13120930000"}) |
+------------------------------------------------------------------+
| (13120930000 :t_mobile{dt: "2021-08-08", mobile: "13120930000"}) |
+------------------------------------------------------------------+
Got 2 rows (time spent 6487/6891 us)
在2.0.1版本里有个相关的bug:
https://github.com/vesoft-inc/nebula-graph/issues/1312
请参阅下
kyle
4
对的。但不同边类型是可以查出结果的。
我本地测试是对的:
(czp@nebula) [test]> match p=(v1:A{id:1})-->(v2)<--(v3) where id(v1)==id(v3) return p
+-----------------------------------------------------------------------------+
| p |
+-----------------------------------------------------------------------------+
| <("a1" :A{id: 1})-[:E@0 {}]->("a2" :A{id: 2})<-[:E1@0 {}]-("a1" :A{id: 1})> |
+-----------------------------------------------------------------------------+
| <("a1" :A{id: 1})-[:E1@0 {}]->("a2" :A{id: 2})<-[:E@0 {}]-("a1" :A{id: 1})> |
+-----------------------------------------------------------------------------+
system
关闭
5
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。