[英]OrientDB select Vertex, Edge pairs from query
在OrientDb圖數據庫中,我試圖獲取有關“頂點”,“邊緣”對的信息。
例如,考慮以下情況:
V1 ---E1---> V2
---E2---> V3 --E3--> V2
結果,我希望獲得以下3行;
V1, E1
V1, E2
V3, E3
我嘗試了以下方法:
select label, flatten(out.label) from V
select label from (select flatten(out) from V)
select label, flatten(out) from V
select flatten(out) from V
select $current, label from (traverse out from V while $depth <= 1) where $depth = 1
但是這些解決方案似乎都沒有返回我想要的。 如何返回頂點,邊對?
FLATTEN運算符是單獨工作的,因為得到一個字段並使其成為結果。 我不明白你想做什么。 你能寫出預期的輸出嗎?
對於OrientDB,您實際上想做的事情非常簡單,似乎您對此問題的思考過多。
讓我們創建您的示例:
V1 ---E1---> V2
---E2---> V3 --E3--> V2
在OrientDB中,您將執行以下操作:
/* Create nodes */
CREATE CLASS Node EXTENDS V
CREATE PROPERTY Node.name STRING (MANDATORY TRUE)
CREATE VERTEX Node SET name = 'V1'
CREATE VERTEX Node SET name = 'V2'
CREATE VERTEX Node SET name = 'V3'
/* Create edges */
CREATE CLASS Link EXTENDS E
CREATE PROPERTY Link.name STRING (MANDATORY TRUE)
CREATE EDGE Link
FROM (SELECT FROM Node WHERE name = 'V1')
TO (SELECT FROM Node WHERE name = 'V2')
SET name = 'E1'
CREATE EDGE Link
FROM (SELECT FROM Node WHERE name = 'V1')
TO (SELECT FROM Node WHERE name = 'V3')
SET name = 'E2'
CREATE EDGE Link
FROM (SELECT FROM Node WHERE name = 'V3')
TO (SELECT FROM Node WHERE name = 'V2')
SET name = 'E3'
這將創建以下圖形:
現在對如何在OrientDB中進行查詢進行一些解釋。 假設您加載了一個頂點: SELECT * FROM Node WHERE name = 'V1'
。 然后,要加載其他信息,請使用:
in()
Link
類的所有傳入頂點(跳過邊): in('Link')
inE()
Link
所有傳入邊緣: inE('Link')
out()
Link
類的所有傳出頂點(跳過邊): out('Link')
outE()
Link
所有輸出邊緣: outE('Link')
因此,在您的情況下,您想加載所有頂點及其外邊緣,因此我們執行以下操作:
SELECT name, outE('Link') FROM Node
加載頂點的名稱和指向輸出邊緣的指針:
如果您想獲得輸出邊緣的名稱的列表,我們只需執行以下操作:
SELECT name, outE('Link').name FROM Node
這使:
這正是您在問題中要問的。 如您所見,這在OrientDB中非常簡單,您只需要意識到OrientDB比您想象的要聰明:)
Neo4j中使用的CYPHER語法最終救了我。
start n=node(*) MATCH (n)-[left]->(n2)<-[right]-(n3) WHERE n.type? ='myType' AND left.line > right.line - 1 AND left.line < right.line + 1 RETURN n, left, n2, right, n3
節點n是樞轉元件,就像在路徑內的每個其他步驟一樣,可以提供一個過濾器。 對我來說,根據路徑的其他部分選擇進一步的步驟很重要。
使用OrientDb,我無法找到一種輕松地將屬性彼此關聯的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.