Давайте возьмем этот пример: у меня есть набор данных с убийцами, которые убивали друг друга.У нас есть murderer-killed->murderer
.
neo4jClient.Cypher
.Match("(murderer1:MurdererNode)-[k:KILLED]->(murderer2:MurdererNode)
.Where((MurdererNode murderer1) => murderer1.Name == "someName")
.AndWhere((MurdererNode murderer2) => murderer2.Name == "someName2")
.Delete("k")
Теперь, в моем приложении, я передаю некоторые параметры и удаляю «убитые» отношения между двумя узлами.Может случиться так, что ни один из узлов не будет иметь никаких входящих или убитых отношений сразу после выполнения удаления.Только в этом случае, т.е. когда оба входящих и исходящих равны 0, я хочу удалить узел из моей базы данных.
После удаления отношения я хочу выполнить «IF node.out_relationship.count = 0 и узел.in_relationship.count = 0, затем «УДАЛИТЬ узел» для обоих узлов, участвующих в отношении.Другими словами, я хочу выполнить некоторую работу по удалению связей на своих узлах.
Я думал улучшить свой запрос следующим образом:
neo4jClient.Cypher
.Match("(murderer1:MurdererNode)-[k:KILLED]->(murderer2:MurdererNode)
.Where((MurdererNode murderer1) => murderer1.Name == "someName")
.AndWhere((MurdererNode murderer2) => murderer2.Name == "someName2")
.Delete("k")
.With("murderer1,murderer2")
.Match("(murderer1)-[:KILLED]-()")
.Where("count(murderer1)=0")
.Delete(murderer1)
.Match("(murderer2)-[:KILLED]-()")
.Where("count(murderer2)=0")
.Delete(murderer2)
(Очевидно, я мог разбитьзапросы в другие сеансы, но я думаю, что хранение всего в одном сеансе, повторное использование узла, было бы более эффективным.)
В любом случае, я не уверен, какой смысл имеет это изменение, оно выглядит уродливо, и этоТакое чувство, что я наклоняюсь назад.
Как я могу продолжить?Буду признателен за любую помощь.Спасибо.