2015-05-18 138 views
4

有沒有辦法在同一個查詢中創建頂點和邊緣?更新和Upsert的頂點和邊緣

我知道我們可以使用out_EdgeName/in_EdgeName更新頂點的邊緣,如果它已經存在於UPDATE查詢中,但是如何做到這一點,以便創建一個新的邊並將其分配給頂點?

更新Upsert中的示例用例查詢 - 正在創建Vertex,並且我們需要爲該頂點創建一個新的Edge。我們可以在相同的查詢中做到這一點,或者我們至少需要2個查詢(即2 UPDATE - UPSERTS)?

orientdb sql update edge?服用提示:

喜歡的東西 - UPDATE人員SET手機= 000000,out_Inside =( UPDATE邊緣UPSERT其中= @ some_rid /子查詢,出= $這個),其中爲person_id = 8

回答

0

如果您使用的是新版本的orientdb 2.1,那麼這個問題是真實的。 但據我所知這個功能是在2.2版本中實現的。

「據我所知,更新工程(包括輸入/​​輸出):」

UPDATE FRIEND SET in=#11:5 WHERE in.name="Samantha" and out.name="Mat" 

雖然使用set子句中的查詢的輸入/輸出會導致它返回數組:

UPDATE Friend SET in=(SELECT FROM User WHERE name="Jason") WHERE in.name="Samantha" and out.name="Mat" 

Upsert也可以工作,雖然創建一個新的頂點時它不會設置輸入/輸出屬性。 您可以設置的輸入/輸出性能你的自我,就像這樣:

UPDATE Friend SET comment="Wazzzaup", in=#11:5, out=#11:6 UPSERT WHERE in.name="Jason" AND out.name="Mat" 

這將導致更長的查詢中=和OUT =使用子查詢的時候,但至少它的工作原理(子查詢具有與上述相同的問題)。

我從問題中獲得了此信息: https://github.com/orientechnologies/orientdb/issues/1114#issuecomment-156585776