2014-10-10 82 views
0
緣關係

我會盡我所能來解釋這個問題...執行後:刪除通過SQL

delete edge SOME_EDGE from (select from SourceNode where foo=bar) to (select from TargetNode where foo=bar) 

當邊緣的最後一個引用被刪除,類型名稱仍然堅持SomeClass的用空列表,即:

"out_SOME_EDGE": [] 

與in_SOME_EDGE和相反的關係類似。

然後執行查詢時:

select from SourceNode where out_SOME_EDGE is not null 

與空列表的引用這些類仍然返回。

顯然

select from SourceNode where out_SOME_EDGE=[] 

沒有做任何事情。我怎樣才能找到和/或刪除這些過時/空的邊緣引用?

update SourceNode remove out_SOME_EDGE where out_SOME_EDGE is not null 
update TargetNode remove in_SOME_EDGE where in_SOME_EDGE is not null 

當然有效,但不是最好的方法,因爲TargetNode仍然可以有效的引用。

我試圖找到一個解決方案越深入,越是看起來像是一個bug,頂點被允許帶有空引用列表的邊緣,或者當最後一個目標引用被刪除時這些邊緣不會被刪除。

回答

1

空列表意味着沒有任何關係(輸入/輸出)

我認爲,如果最後一個引用被刪除的刪除邊緣命令不刪除該字段。

試試這個找到空的關係

select from SourceNode where out_SOME_EDGE is not null or out_SOME_EDGE.size() = 0 
1

集合保持以承載新的項目。如果您想將其設置爲null執行此:

update V out_SOME_EDGE = NULL where out_SOME_EDGE.size() = 0 

或者,更好,完全刪除,而不是將其設置爲null執行該財產:

update V remove out_SOME_EDGE where out_SOME_EDGE.size() = 0