OrientDB 遍历功能
OrientDB Traverse Functionality
我想要 select 所有连接到另一个顶点的顶点。我目前在 OrientDB 中使用 traverse
函数。考虑以下示例:
> create class professor extends V
> create class course extends V
> insert into professor set name='Smith'
Inserted record 'professor#14:0{name:Smith} v1'
> insert into course set name='Calculus'
Inserted record 'course#15:0{name:Calculus} v1'
> create class teaches extends E
> create edge teaches from #14:0 to #15:0
Created edge '[teaches#16:0{out:#14:0,in:#15:0} v3]'
现在,当我尝试遍历查找 Smith 教授教授的课程时,我使用以下命令:
> traverse out_teaches from #15:0
----+-----+---------+-----+-----------+-----+-----
# |@RID |@CLASS |name |out_teaches|out |in
----+-----+---------+-----+-----------+-----+-----
0 |#14:0|professor|Smith|[size=1] |null |null
1 |#16:0|teaches |null |null |#14:0|#15:0
----+-----+---------+-----+-----------+-----+-----
为什么 return 对我来说是边缘而不是我正在寻找的顶点(路线)? return 给我顶点的适当命令是什么?我希望 'Calculus' 的记录被 return 编辑。
你的查询对我来说没问题。
在我的例子中,教授的#11:0、课程的#12:0 和教师的#13:0
只需再次重新运行您的查询或尝试以下操作:
从#12:0
遍历两者('teaches')
选择课程的正确语法(至少在 OrientDB 2.1 中)将基于 out('teaches')。例如:
> select expand(out('teaches')) from (select from Professor where name='Smith')
----+-----+------+--------+----------
# |@RID |@CLASS|name |in_teaches
----+-----+------+--------+----------
0 |#12:0|Course|Calculus|[size=1]
----+-----+------+--------+----------
也就是说,正如预期的那样,只有一个顶点。
请注意 'traverse' 用于不同的目的。它涉及遍历图形的迭代过程。
out_teaches
"out_teaches" 是对边的引用。使用 OrientDB 2.1.7,我为您的 "out_teaches" 查询获得的响应如下:
> select expand(out_teaches) from (select from Professor where name='Smith')
----+-----+-------+-----+-----
# |@RID |@CLASS |out |in
----+-----+-------+-----+-----
0 |#13:0|teaches|#11:0|#12:0
----+-----+-------+-----+-----
同样,这是人们所期望的 - 优势。
我稍微扩展了你的图表来尝试你的查询。
如果你只想知道边 'teaches' 到某个起始顶点的连接顶点,你应该使用 SELECT EXPAND (OUT / IN / BOTH)
因为如果你想探索图形,TRAVERSE
更有用在不同的深度(在我的例子中 "Smith" 有 @rid
#11:0):
select expand(out('teaches')) from (select from Professor where name='Smith')
----+-----+------+------------+----------+----------
# |@RID |@CLASS|name |in_teaches|in_follows
----+-----+------+------------+----------+----------
0 |#12:0|course|Calculus |[size=1] |[size=1]
1 |#12:1|course|Astrophysics|[size=1] |[size=1]
2 |#12:2|course|Law |[size=2] |[size=1]
----+-----+------+------------+----------+----------
或 select expand(out('teaches')) from #11:0
你会得到相同的结果:
----+-----+------+------------+----------+----------
# |@RID |@CLASS|name |in_teaches|in_follows
----+-----+------+------------+----------+----------
0 |#12:0|course|Calculus |[size=1] |[size=1]
1 |#12:1|course|Astrophysics|[size=1] |[size=1]
2 |#12:2|course|Law |[size=2] |[size=1]
----+-----+------+------------+----------+----------
或者你可以获得教授所有的连接顶点"Smith"
select expand(out()) from professor where name="Smith"
----+-----+----------+------------+----------+----------+------------+----------
# |@RID |@CLASS |name |in_teaches|in_follows|in_studiesAt|in_worksAt
----+-----+----------+------------+----------+----------+------------+----------
0 |#12:0|course |Calculus |[size=1] |[size=1] |null |null
1 |#12:1|course |Astrophysics|[size=1] |[size=1] |null |null
2 |#12:2|course |Law |[size=2] |[size=1] |null |null
3 |#16:0|university|Cambridge |null |null |[size=1] |[size=1]
----+-----+----------+------------+----------+----------+------------+----------
您的查询 traverse out_teaches from #11:0
似乎列出了起始顶点和所有具有相对 IN
和 OUT
顶点的连接边:
----+-----+---------+-----+-----------+-----------+-----+-----
# |@RID |@CLASS |name |out_teaches|out_worksAt|out |in
----+-----+---------+-----+-----------+-----------+-----+-----
0 |#11:0|professor|Smith|[size=3] |[size=1] |null |null
1 |#13:0|teaches |null |null |null |#11:0|#12:0
2 |#13:1|teaches |null |null |null |#11:0|#12:1
3 |#13:2|teaches |null |null |null |#11:0|#12:2
----+-----+---------+-----+-----------+-----------+-----+-----
我也尝试了 traverse out_teaches from professor
结果与之前的查询类似:
----+-----+---------+-----+-----------+-----------+-----+-----
# |@RID |@CLASS |name |out_teaches|out_worksAt|out |in
----+-----+---------+-----+-----------+-----------+-----+-----
0 |#11:0|professor|Smith|[size=3] |[size=1] |null |null
1 |#13:0|teaches |null |null |null |#11:0|#12:0
2 |#13:1|teaches |null |null |null |#11:0|#12:1
3 |#13:2|teaches |null |null |null |#11:0|#12:2
4 |#11:1|professor|Green|[size=1] |[size=1] |null |null
5 |#13:3|teaches |null |null |null |#11:1|#12:2
----+-----+---------+-----+-----------+-----------+-----+-----
我想要 select 所有连接到另一个顶点的顶点。我目前在 OrientDB 中使用 traverse
函数。考虑以下示例:
> create class professor extends V
> create class course extends V
> insert into professor set name='Smith'
Inserted record 'professor#14:0{name:Smith} v1'
> insert into course set name='Calculus'
Inserted record 'course#15:0{name:Calculus} v1'
> create class teaches extends E
> create edge teaches from #14:0 to #15:0
Created edge '[teaches#16:0{out:#14:0,in:#15:0} v3]'
现在,当我尝试遍历查找 Smith 教授教授的课程时,我使用以下命令:
> traverse out_teaches from #15:0
----+-----+---------+-----+-----------+-----+-----
# |@RID |@CLASS |name |out_teaches|out |in
----+-----+---------+-----+-----------+-----+-----
0 |#14:0|professor|Smith|[size=1] |null |null
1 |#16:0|teaches |null |null |#14:0|#15:0
----+-----+---------+-----+-----------+-----+-----
为什么 return 对我来说是边缘而不是我正在寻找的顶点(路线)? return 给我顶点的适当命令是什么?我希望 'Calculus' 的记录被 return 编辑。
你的查询对我来说没问题。
在我的例子中,教授的#11:0、课程的#12:0 和教师的#13:0
只需再次重新运行您的查询或尝试以下操作:
从#12:0
遍历两者('teaches')选择课程的正确语法(至少在 OrientDB 2.1 中)将基于 out('teaches')。例如:
> select expand(out('teaches')) from (select from Professor where name='Smith')
----+-----+------+--------+----------
# |@RID |@CLASS|name |in_teaches
----+-----+------+--------+----------
0 |#12:0|Course|Calculus|[size=1]
----+-----+------+--------+----------
也就是说,正如预期的那样,只有一个顶点。
请注意 'traverse' 用于不同的目的。它涉及遍历图形的迭代过程。
out_teaches
"out_teaches" 是对边的引用。使用 OrientDB 2.1.7,我为您的 "out_teaches" 查询获得的响应如下:
> select expand(out_teaches) from (select from Professor where name='Smith')
----+-----+-------+-----+-----
# |@RID |@CLASS |out |in
----+-----+-------+-----+-----
0 |#13:0|teaches|#11:0|#12:0
----+-----+-------+-----+-----
同样,这是人们所期望的 - 优势。
我稍微扩展了你的图表来尝试你的查询。
如果你只想知道边 'teaches' 到某个起始顶点的连接顶点,你应该使用 SELECT EXPAND (OUT / IN / BOTH)
因为如果你想探索图形,TRAVERSE
更有用在不同的深度(在我的例子中 "Smith" 有 @rid
#11:0):
select expand(out('teaches')) from (select from Professor where name='Smith')
----+-----+------+------------+----------+----------
# |@RID |@CLASS|name |in_teaches|in_follows
----+-----+------+------------+----------+----------
0 |#12:0|course|Calculus |[size=1] |[size=1]
1 |#12:1|course|Astrophysics|[size=1] |[size=1]
2 |#12:2|course|Law |[size=2] |[size=1]
----+-----+------+------------+----------+----------
或 select expand(out('teaches')) from #11:0
你会得到相同的结果:
----+-----+------+------------+----------+----------
# |@RID |@CLASS|name |in_teaches|in_follows
----+-----+------+------------+----------+----------
0 |#12:0|course|Calculus |[size=1] |[size=1]
1 |#12:1|course|Astrophysics|[size=1] |[size=1]
2 |#12:2|course|Law |[size=2] |[size=1]
----+-----+------+------------+----------+----------
或者你可以获得教授所有的连接顶点"Smith"
select expand(out()) from professor where name="Smith"
----+-----+----------+------------+----------+----------+------------+----------
# |@RID |@CLASS |name |in_teaches|in_follows|in_studiesAt|in_worksAt
----+-----+----------+------------+----------+----------+------------+----------
0 |#12:0|course |Calculus |[size=1] |[size=1] |null |null
1 |#12:1|course |Astrophysics|[size=1] |[size=1] |null |null
2 |#12:2|course |Law |[size=2] |[size=1] |null |null
3 |#16:0|university|Cambridge |null |null |[size=1] |[size=1]
----+-----+----------+------------+----------+----------+------------+----------
您的查询 traverse out_teaches from #11:0
似乎列出了起始顶点和所有具有相对 IN
和 OUT
顶点的连接边:
----+-----+---------+-----+-----------+-----------+-----+-----
# |@RID |@CLASS |name |out_teaches|out_worksAt|out |in
----+-----+---------+-----+-----------+-----------+-----+-----
0 |#11:0|professor|Smith|[size=3] |[size=1] |null |null
1 |#13:0|teaches |null |null |null |#11:0|#12:0
2 |#13:1|teaches |null |null |null |#11:0|#12:1
3 |#13:2|teaches |null |null |null |#11:0|#12:2
----+-----+---------+-----+-----------+-----------+-----+-----
我也尝试了 traverse out_teaches from professor
结果与之前的查询类似:
----+-----+---------+-----+-----------+-----------+-----+-----
# |@RID |@CLASS |name |out_teaches|out_worksAt|out |in
----+-----+---------+-----+-----------+-----------+-----+-----
0 |#11:0|professor|Smith|[size=3] |[size=1] |null |null
1 |#13:0|teaches |null |null |null |#11:0|#12:0
2 |#13:1|teaches |null |null |null |#11:0|#12:1
3 |#13:2|teaches |null |null |null |#11:0|#12:2
4 |#11:1|professor|Green|[size=1] |[size=1] |null |null
5 |#13:3|teaches |null |null |null |#11:1|#12:2
----+-----+---------+-----+-----------+-----------+-----+-----