通过SQL删除边缘关系

时间:2014-10-10 16:57:58

标签: orientdb

我会尽力解释问题......执行后:

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仍然可以有有效的引用。

我试图找到一个解决方案越深入,看起来这是一个错误,即顶点被允许有空参考列表的边,或者当删除最后一个目标参考时不会删除这些边。 / p>

2 个答案:

答案 0 :(得分:1)

空列表表示没有关系(输入/输出)

我认为删除边缘命令如果删除了最后一个引用,则不会删除该字段。

尝试此操作以找到空关系

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

答案 1 :(得分: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