2016-09-24 62 views
0

我正在使用OrientDB(2.2.10),偶尔我想直观地检查我的数据集以确保我正确地做事情。在这个页面上OrientDB的http://orientdb.com/orientdb/你看到一个大图的一个很好的可视化下面的查询:OrientDB工作室的可视化图形

select * from V limit -1; 

所以,我想相同的查询,我的数据集,但结果是如此极端低迷,我无法正常工作它。我的数据集不是非常大(几百个顶点,几千条边),但结果仍然不可行。我尝试了所有主流浏览器,但所有的结果都一样。另外我的电脑没有动力不足,我有一个四核i7 16GB内存。

作为一个非常简单的例子,我有以下图表: BAR --WITHIN ---> CITY --LOCATED_IN - >国家

这里:Find "friends of friends" with OrientDB SQL我能得到至少怎样一个例子在图上进行这种查询。我设法让我图的一个子集,举例如下:

select expand(
bothE('WITHIN').bothV() 
) from Bar where barName='Foo' limit -1 

该得到的我1条顶点,内边缘和城市顶点的图形。但是如果我现在想要进一步提取这个城市所在的国家,我就无法得到这种风格的查询来为我工作。我试过这个:

select expand(
bothE('WITHIN').bothV() 
.bothE('LOCATED_IN').bothV() 
) from Bar where barName='Foo' limit -1 

这会导致显示相同的子集。但是,如果我首先运行第一个查询,然后不清除画布运行第二个查询,我会得到3个顶点。所以看起来我很接近,但我想获得所有3个顶点,并且它在一个查询中是边缘的,不必先运行一个然后再运行另一个。有人能指出我正确的方向吗?

回答

1

如果你想获得所有的三个顶点,从中间(城市)开始要容易得多,并且要进出酒吧和酒吧。我曾与一个类似的小结构的尝试:OrientDB Bar Structure

要获得城市,酒吧的名字和国家,你可以尝试这样的查询:

select name, in("WITHIN").name as barName,out("LOCATED_IN").name as barCountry from (select from City where name='Milan') unwind barName, barCountry 

和输出将是:

OrientDB Bar Query Output

希望它有帮助。 如果它不适合您的情况,请告诉我。

+0

感谢Oleksandr和Alessandro为你的答案。我今晚会试试他们,看看最适合我的是什么!我仍然在苦苦挣扎的是,你的两个解决方案看起来都很不一样,一个是“traverse”关键字,另一个是“unwind”关键字。我很难找到一个指导或教程,其中解释了这些概念,哪个更适合哪种情况。你可能有一些链接到一些在线资源,这些概念被解释?谢谢! –

+0

http://orientdb.com/docs/last/SQL-Traverse.html/ http://orientdb.com/docs/last/SQL-Query.html#unwinding –

+1

完美,感谢您的链接。这并不是完全清楚,但我在哪种情况下使用什么,但我想我只需要在这里建立一点经验:) –

1

你可以使用

traverse * from (select from bar where barName='Foo') while $depth <= 4 

例子:我试图与这个小图

enter image description here

和我

enter code here

希望它能帮助。