Я пишу приведенный ниже запрос Neo4j Cypher, чтобы добавить новый Part
и удалить старый Part
из Vehicle
узла.Я использую Neo4j (версия 3.4.1)
newParts
и removedParts
мои параметры.Это списки String
.
with {newParts} AS newParts
unwind newParts as newPart
match (r:Vehicle) where id(r)=639
merge (r)-[:HAS_PART]->(np:Part{name:newPart})
on create np+={lastModifiedDateTime:localdatetime(), createdDateTime:localdatetime()}
with r optional match (r)-[rel:HAS_PART]-(p:Part) where p.name in {removedParts}
delete rel
with r match q=(r)--()
return nodes(q), relationships(q))
Это прекрасно работает, когда я предоставляю параметр newParts как непустой.
Однако, когда он пуст, я не получаю свой финалузлы и отношения.Я понимаю, почему это происходит, потому что разматывание останавливает выполнение, когда список пуст.Я попытался переместить with..unwind
часть ниже del
, и он успешно удаляет удаленные части Part
.Однако он не возвращает конечные узлы и отношения, поскольку они появляются после размотки.
Я не уверен, как заставить это работать с пустым параметром newParts.Я пытался использовать case
, но я думаю, case
не работает с узлами и связями.
Любая помощь или указатели будут высоко оценены.
Заранее спасибо
V