2016-09-24 102 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

希望它能幫助。