Удаление пограничных отношений через 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 все еще может иметь действительные ссылки.

Чем глубже я пытаюсь найти решение, тем больше кажется ошибкой то, что вершинам разрешено иметь ребра с пустыми списками ссылок, или что эти ребра не удаляются при удалении последней целевой ссылки.


person CodeShaman    schedule 10.10.2014    source источник


Ответы (2)


Пустой список означает отсутствие связи (In/Out)

Я думаю, что команда удаления края не удаляет поле, если удаляется последняя ссылка.

Попробуйте это, чтобы найти пустые отношения

select from SourceNode where out_SOME_EDGE is not null or out_SOME_EDGE.size() = 0
person wolf4ood    schedule 11.10.2014

Коллекция остается для размещения новинок. Если вы хотите установить значение 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
person Lvca    schedule 12.10.2014