Сохранение результата запроса на время запроса в Neo4j Cypher - PullRequest
0 голосов
/ 05 февраля 2019

Я использую neo4j 3.5.2 Desktop с Nodejs.Я пытаюсь обновить свойства записи пользователя и добавить / удалить связь с другими узлами в том же запросе: мой запрос выглядит следующим образом:

 MATCH (user:Dealer {email: $paramObj.email})
 SET user += apoc.map.clean($paramObj, ["email","vehicles"],[])
                    WITH user, $paramObj.vehicles AS vehicles
                    UNWIND vehicles AS vehicle
                    MATCH(v:Vehicles {name:vehicle}) 
                    MERGE (user)-[r:SUPPLY_PARTS_FOR]->(v)
                    ON CREATE SET  r.since = timestamp()
                    WITH vehicles,user
                    MATCH (user)-[r:SUPPLY_PARTS_FOR]->(v)
                    WHERE NOT apoc.coll.contains(vehicles,v.name)
                    DELETE r
                    WITH $paramObj.email AS dealeremail
                    MATCH (user:Dealer {email: dealeremail})
                    RETURN user

У меня возникла проблема с возвратом пустого массива 'user'когда запрос, связанный с удалением отношения транспортного средства (r), приводит к появлению нулевых строк.

Как сохранить исходный результат «пользователя» или сохранить адрес электронной почты, чтобы повторить запрос.Я пытался использовать WITH $ paramObj.email AS качестве дилера электронной почты, но, похоже, я не могу переслать дилеру электронную почту ... Хотя я мог.

1 Ответ

0 голосов
/ 05 февраля 2019

Эта проблема связана с возвращением нулевых строк, поэтому до меня дошло, что OPTIONAL MATCH также будет возвращать результат NULL, но с одной строкой с нулевыми значениями.Поэтому я меняю МАТЧ в поисках отношения для удаления на ФАКУЛЬТАТИВНОЕ МАТЧ.

  MATCH (user:Dealer {email: $paramObj.email})
  SET user += apoc.map.clean($paramObj, ["email","vehicles"],[])
                        WITH user, $paramObj.vehicles AS vehicles
                        UNWIND vehicles AS vehicle
                        MATCH(v:Vehicles {name:vehicle}) 
                        MERGE (user)-[r:SUPPLY_PARTS_FOR]->(v)
                        ON CREATE SET  r.since = timestamp()
                        WITH vehicles,user
                        OPTIONAL MATCH (user)-[r:SUPPLY_PARTS_FOR]->(v)
                        WHERE NOT apoc.coll.contains(vehicles,v.name)
                        DELETE r
                        RETURN user    

Это добилось цели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...